{"items":[{"type":"link","label":"Self-Service API","link":"/docs/openapi/self-service-v1","routeSlug":"/docs/openapi/self-service-v1","content":{"contentType":"overview","meta":{"name":"Self-Service API"},"children":[{"nodeType":"container","panels":[{"title":"Download OpenAPI description","titleTranslationKey":"download.description.title","children":[{"kind":"download","label":"self-service-v1.json","url":"/_bundle/docs/openapi/self-service-v1.json?download"},{"kind":"download","label":"self-service-v1.yaml","url":"/_bundle/docs/openapi/self-service-v1.yaml?download"}]},{"title":"Overview","titleTranslationKey":"info.title","children":[]},{"title":"Languages","titleTranslationKey":"languages.title","children":[{"kind":"languages","options":[{"key":"curl","title":"curl","lang":"curl"},{"key":"javascript","title":"JavaScript","lang":"JavaScript"},{"key":"node","title":"Node.js","lang":"Node.js"},{"key":"python","title":"Python","lang":"Python"},{"key":"java","title":"Java","lang":"Java"},{"key":"csharp","title":"C#","lang":"C#"},{"key":"php","title":"PHP","lang":"PHP"},{"key":"go","title":"Go","lang":"Go"},{"key":"ruby","title":"Ruby","lang":"Ruby"},{"key":"r","title":"R","lang":"R"},{"key":"payload","title":"Payload","lang":"Payload"}]}]},{"title":"Servers","titleTranslationKey":"servers.title","children":[{"kind":"servers","servers":[{"url":"/_mock/docs/openapi/self-service-v1","description":"Mock server","isMockServer":true},{"url":"https://api.dev.deepcredentials.swiss","description":"Development"},{"url":"https://api.int.deepcredentials.swiss","description":"Integration"}],"mode":"default"}]}],"children":[{"nodeType":"overview-section-wrapper","children":[{"nodeType":"header","level":1,"label":"Self-Service API (1.0.0)","showPageActions":true},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Decide on end-user-initiated credential requests."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"This API is for tenants whose self-service configs are in "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"webhook"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" verification mode. When an end-user submits a request through a share-link, DeepCredentials delivers a "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"self_service.request.submitted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" webhook to your endpoint; you decide approve / reject and POST your decision back here. The "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" endpoint lets you re-fetch the full request payload out-of-band — useful when a webhook delivery failed or you want to inspect history."},"children":[]}]}]}]}],"sectionId":"/docs/openapi/self-service-v1"}],"sectionId":"/docs/openapi/self-service-v1"}]}]}},{"type":"group","label":"Self-Service","link":"/docs/openapi/self-service-v1/self-service","routeSlug":"/docs/openapi/self-service-v1/self-service","items":[{"label":"Get a self-service request.\n","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/self-service-v1/self-service/get:b2b.getselfservicerequest","routeSlug":"/docs/openapi/self-service-v1/self-service/get:b2b.getselfservicerequest","metadata":{"seo":{"title":"Get a self-service request.\n","description":"Returns the full snapshot of a request: status, credential definition, email, captured claims, extra fields, identification result (when applicable), offer id, and timestamps. The primary path for tenants to fetch details after receiving a self-service webhook (which carries only `request_id`)."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"GET:b2b.GetSelfServiceRequest","name":"Get a self-service request.\n","isWebhook":false,"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Get a self-service request.\n","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns the full snapshot of a request: status, credential definition, email, captured claims, extra fields, identification result (when applicable), offer id, and timestamps. The primary path for tenants to fetch details after receiving a self-service webhook (which carries only `request_id`)."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Authentication: `self_service` scope."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"BearerAuth","scopes":[],"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"DeepAdmin-issued Keycloak access token obtained via the OAuth 2.0\nResource Owner Password Credentials grant against the DeepCloud SSO\nrealm. See the Service Users guide for the exchange flow."}]}]},{"nodeType":"item-content","variant":"path","label":"Path","labelTranslationKey":"path","parameters":[{"name":"requestId","in":"path","schemaId":"schema_72","required":true}],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/parameters"},{"nodeType":"item-content","variant":"headers","label":"Headers","labelTranslationKey":"header","parameters":[{"name":"X-Org-Id","in":"header","schemaId":"schema_72","description":"Organization the call is acting on. The authenticated service user must be a member of this organization in DeepAdmin; otherwise the request returns 404.","required":true},{"name":"X-Environment","in":"header","schemaId":"schema_73","description":"Environment the call is scoped to. Resources are isolated per environment.","required":true}],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/b2b/v1/self-service/requests/{requestId}","servers":[{"url":"/_mock/docs/openapi/self-service-v1","description":"Mock server","isMockServer":true},{"url":"https://api.dev.deepcredentials.swiss","description":"Development"},{"url":"https://api.int.deepcredentials.swiss","description":"Integration"}],"parameters":{"path":[{"name":"requestId","in":"path","required":true,"schemaId":"schema_72","style":"simple","explode":false}],"query":[],"querystring":[],"header":[{"name":"X-Org-Id","in":"header","required":true,"schemaId":"schema_72"},{"name":"X-Environment","in":"header","required":true,"schemaId":"schema_73"}],"cookie":[]},"security":[{"schemes":[{"id":"BearerAuth","type":"http","scheme":"bearer","bearerFormat":"JWT"}],"scopes":[]}],"responseCodes":["200","400","401","403","404","429","500"],"pointer":"/b2b/v1/self-service/requests/{requestId}","href":"self-service/get:b2b.getselfservicerequest","openApiOperationId":"GET:b2b.GetSelfServiceRequest","summary":"Get a self-service request.\n"},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/docs/openapi/self-service-v1","description":"Mock server","isMockServer":true},{"url":"https://api.dev.deepcredentials.swiss","description":"Development"},{"url":"https://api.int.deepcredentials.swiss","description":"Integration"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Success response","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_74","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_74","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/200/content/application~1json/example"]},{"code":"400","description":"Invalid request. Common causes: missing or malformed X-Org-Id / X-Environment headers, or a missing required field in the request body.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/400/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/400/content/application~1json/example"]},{"code":"401","description":"Unauthenticated. The Bearer token failed validation (signature, issuer, audience, or expiry).","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/401/content/application~1json/example"]},{"code":"403","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Permission denied. The token does not carry the scope required by this endpoint. Check the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"scope"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" claim on the token you received from the DeepCloud SSO token endpoint."},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/403/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/403/content/application~1json/example"]},{"code":"404","description":"Resource not found. Either the resource ID is unknown, or the X-Org-Id you supplied is not an organization the authenticated service user is a member of.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/404/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/404/content/application~1json/example"]},{"code":"429","description":"Rate limit exceeded.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/429/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/429/content/application~1json/example"]},{"code":"500","description":"Internal server error.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/500/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/500/content/application~1json/example"]}],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_74","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_74","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/401/content/application~1json/example"]}}},{"code":"403","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/403/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/403/content/application~1json/example"]}}},{"code":"404","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/404/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/404/content/application~1json/example"]}}},{"code":"429","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/429/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/429/content/application~1json/example"]}}},{"code":"500","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/500/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/500/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/self-service/get:b2b.getselfservicerequest"}],"panels":[]}]},"httpPath":"/b2b/v1/self-service/requests/{requestId}"},{"label":"Approve or reject a self-service request.\n","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/self-service-v1/self-service/post:b2b.decideselfservicerequest","routeSlug":"/docs/openapi/self-service-v1/self-service/post:b2b.decideselfservicerequest","metadata":{"seo":{"title":"Approve or reject a self-service request.\n","description":"The webhook-mode counterpart of the portal's approve / reject buttons: the tenant's backend posts the decision here after acting on a `self_service.request.submitted` event. Validation, merge, offer or invitation creation, status transition and pub-sub all live in the selfservice package — this handler is a thin auth + scope check (`self_service`)."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"POST:b2b.DecideSelfServiceRequest","name":"Approve or reject a self-service request.\n","isWebhook":false,"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post","hasSamples":true},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Approve or reject a self-service request.\n","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The webhook-mode counterpart of the portal's approve / reject buttons: the tenant's backend posts the decision here after acting on a `self_service.request.submitted` event. Validation, merge, offer or invitation creation, status transition and pub-sub all live in the selfservice package — this handler is a thin auth + scope check (`self_service`)."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"BearerAuth","scopes":[],"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"DeepAdmin-issued Keycloak access token obtained via the OAuth 2.0\nResource Owner Password Credentials grant against the DeepCloud SSO\nrealm. See the Service Users guide for the exchange flow."}]}]},{"nodeType":"item-content","variant":"path","label":"Path","labelTranslationKey":"path","parameters":[{"name":"requestId","in":"path","schemaId":"schema_72","required":true}],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/parameters"},{"nodeType":"item-content","variant":"headers","label":"Headers","labelTranslationKey":"header","parameters":[{"name":"X-Org-Id","in":"header","schemaId":"schema_72","description":"Organization the call is acting on. The authenticated service user must be a member of this organization in DeepAdmin; otherwise the request returns 404.","required":true},{"name":"X-Environment","in":"header","schemaId":"schema_73","description":"Environment the call is scoped to. Resources are isolated per environment.","required":true}],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/parameters"},{"nodeType":"item-content","variant":"body","label":"Request Body","labelTranslationKey":"body","mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"schema_75","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example"]}},"schemaId":"schema_75","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example"],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"POST","path":"/b2b/v1/self-service/requests/{requestId}/decision","servers":[{"url":"/_mock/docs/openapi/self-service-v1","description":"Mock server","isMockServer":true},{"url":"https://api.dev.deepcredentials.swiss","description":"Development"},{"url":"https://api.int.deepcredentials.swiss","description":"Integration"}],"parameters":{"path":[{"name":"requestId","in":"path","required":true,"schemaId":"schema_72","style":"simple","explode":false}],"query":[],"querystring":[],"header":[{"name":"X-Org-Id","in":"header","required":true,"schemaId":"schema_72"},{"name":"X-Environment","in":"header","required":true,"schemaId":"schema_73"}],"cookie":[]},"security":[{"schemes":[{"id":"BearerAuth","type":"http","scheme":"bearer","bearerFormat":"JWT"}],"scopes":[]}],"requestBody":{"application/json":{"schemaId":"schema_75","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example"]}},"responseCodes":["200","400","401","403","404","429","500"],"pointer":"/b2b/v1/self-service/requests/{requestId}/decision","href":"self-service/post:b2b.decideselfservicerequest","openApiOperationId":"POST:b2b.DecideSelfServiceRequest","summary":"Approve or reject a self-service request.\n"},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/docs/openapi/self-service-v1","description":"Mock server","isMockServer":true},{"url":"https://api.dev.deepcredentials.swiss","description":"Development"},{"url":"https://api.int.deepcredentials.swiss","description":"Integration"}],"schemaId":"schema_75","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"schema_75","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example"]}},"examples":[{}]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Success response","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_76","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/200/content/application~1json/example"]}},"schemaId":"schema_76","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/200/content/application~1json/example"]},{"code":"400","description":"Invalid request. Common causes: missing or malformed X-Org-Id / X-Environment headers, or a missing required field in the request body.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/400/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/400/content/application~1json/example"]},{"code":"401","description":"Unauthenticated. The Bearer token failed validation (signature, issuer, audience, or expiry).","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/401/content/application~1json/example"]},{"code":"403","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Permission denied. The token does not carry the scope required by this endpoint. Check the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"scope"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" claim on the token you received from the DeepCloud SSO token endpoint."},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/403/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/403/content/application~1json/example"]},{"code":"404","description":"Resource not found. Either the resource ID is unknown, or the X-Org-Id you supplied is not an organization the authenticated service user is a member of.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/404/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/404/content/application~1json/example"]},{"code":"429","description":"Rate limit exceeded.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/429/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/429/content/application~1json/example"]},{"code":"500","description":"Internal server error.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/500/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/500/content/application~1json/example"]}],"pointer":"/paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_76","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_76","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/401/content/application~1json/example"]}}},{"code":"403","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/403/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/403/content/application~1json/example"]}}},{"code":"404","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/404/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/404/content/application~1json/example"]}}},{"code":"429","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/429/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/429/content/application~1json/example"]}}},{"code":"500","schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/500/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/500/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/self-service/post:b2b.decideselfservicerequest"}],"panels":[]}]},"httpPath":"/b2b/v1/self-service/requests/{requestId}/decision"}],"content":{"contentType":"group","meta":{"name":"Self-Service"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Self-Service","showPageActions":true},{"nodeType":"markdoc","content":"Approve or reject end-user-initiated credential requests."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/b2b/v1/self-service/requests/{requestId}","summary":"Get a self-service request.\n","prefix":{"name":"get","color":"get"},"badges":[],"link":"/self-service/get:b2b.getselfservicerequest","deprecated":false},{"title":"/b2b/v1/self-service/requests/{requestId}/decision","summary":"Approve or reject a self-service request.\n","prefix":{"name":"post","color":"post"},"badges":[],"link":"/self-service/post:b2b.decideselfservicerequest","deprecated":false}]}]}]}]}}],"store":{"schemaStore":{"components/schemas/Error":{"id":"components/schemas/Error","kind":"json-schema","title":"Error","data":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error description."},"details":{"type":"object","description":"Optional structured data with additional context."}}}},"components/schemas/selfservice.IdentificationDetail":{"id":"components/schemas/selfservice.IdentificationDetail","kind":"json-schema","title":"selfservice.IdentificationDetail","data":{"properties":{"method":{"type":"string"},"verified_attributes":{"type":"object"}},"required":["method","verified_attributes"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"IdentificationDetail is non-nil only when the request went through an identification step. We expose the method key and the verified_attributes blob the provider returned (already decrypted at this point). Consumers can ignore it when present and identification was disabled at config time."},"children":[]}]}]}],"type":"object"}},"components/schemas/b2b.credentialDefinitionRefSlim":{"id":"components/schemas/b2b.credentialDefinitionRefSlim","kind":"json-schema","title":"b2b.credentialDefinitionRefSlim","data":{"properties":{"id":{"type":"string","format":"uuid","example":"550e8400-e29b-41d4-a716-446655440000","description":"Credential definition UUID. UUID v4 identifier."},"name":{"description":"Human-readable credential definition name.","type":"string"},"vct":{"description":"Verifiable credential type (vct).","type":"string"}},"required":["id","vct","name"],"description":"A compact reference to the credential definition (id, vct, and name only).","type":"object"}},"schema_72":{"kind":"json-schema","data":{"format":"uuid","type":"string"},"id":"schema_72"},"schema_73":{"kind":"json-schema","data":{"type":"string","enum":["beta","production"]},"id":"schema_73"},"schema_74":{"kind":"json-schema","data":{"properties":{"admin_filled_fields":{"items":{"type":"string"},"description":"Claim keys the admin is expected to fill before approving.","type":"array"},"admin_filled_required":{"items":{"type":"string"},"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Subset of admin_filled_fields that are mandatory for approval."},"children":[]}]}]}],"type":"array"},"admin_filled_types":{"additionalProperties":{"type":"string"},"description":"Value type per admin-filled claim key (e.g. \"string\", \"boolean\").","type":"object"},"claims":{"description":"Claim values captured up to the moment of the fetch.","type":"object"},"completed_at":{"format":"date-time","description":"When the request left the pending state (RFC3339), if applicable.","type":"string"},"config_id":{"type":"string","format":"uuid","description":"UUID v4 identifier.","example":"550e8400-e29b-41d4-a716-446655440000"},"credential_definition":{"$ref":"#/components/schemas/b2b.credentialDefinitionRefSlim"},"editable_field_sources":{"additionalProperties":{"type":"string"},"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Assignment source per editable key: \"user_filled\", \"admin_filled\", or"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"\"identification_filled\"."},"children":[]}]}]}],"type":"object"},"editable_field_types":{"additionalProperties":{"type":"string"},"description":"Value type per editable claim key.","type":"object"},"editable_fields":{"items":{"type":"string"},"description":"All claim keys the admin may supply or override on approval.","type":"array"},"email":{"description":"Email address supplied by the applicant, if any.","type":"string"},"environment":{"description":"Swiyu environment: \"beta\" or \"production\".","type":"string"},"extra_fields":{"description":"Additional free-form fields submitted by the applicant.","type":"object"},"identification":{"$ref":"#/components/schemas/selfservice.IdentificationDetail"},"offer_id":{"type":"string","format":"uuid","description":"UUID v4 identifier.","example":"550e8400-e29b-41d4-a716-446655440000"},"rejection_reason":{"description":"Reason provided when the request was rejected, if any.","type":"string"},"request_id":{"type":"string","format":"uuid","description":"UUID v4 identifier.","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"description":"Current lifecycle status of the request.","type":"string","enum":["awaiting_identification","awaiting_verification","invitation_sent","issued","credential_issued","rejected","expired","failed"]},"submitted_at":{"format":"date-time","description":"When the applicant submitted the request (RFC3339).","type":"string"}},"required":["request_id","config_id","environment","status","credential_definition","claims","extra_fields","admin_filled_fields","admin_filled_types","admin_filled_required","editable_fields","editable_field_types","editable_field_sources","submitted_at"],"type":"object"},"id":"schema_74"},"schema_75":{"kind":"json-schema","data":{"properties":{"admin_claims":{"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional in the contract because configs with no admin-filled claims approve without one. The server-side coverage check (selfservice package) is what enforces presence when the config does have admin-filled keys — a missing key returns InvalidArgument. Wrapped in Option so the generated OpenAPI spec marks it optional; a plain json.RawMessage gets emitted as required by Encore regardless of json:omitempty."},"children":[]}]}]}],"type":"object"},"decision":{"description":"\"approve\" or \"reject\".","type":"string"},"reason":{"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Required on reject. Stored as the request's rejection_reason and shown to the end-user in the rejection email."},"children":[]}]}]}],"type":"string"}},"required":["decision"],"type":"object"},"id":"schema_75"},"schema_76":{"kind":"json-schema","data":{"properties":{"offer_id":{"type":"string","format":"uuid","description":"UUID v4 identifier.","example":"550e8400-e29b-41d4-a716-446655440000"},"request_id":{"type":"string","format":"uuid","description":"UUID v4 identifier.","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string"}},"required":["request_id","status","offer_id"],"type":"object"},"id":"schema_76"}},"exampleStore":{"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/200/content/application~1json/example":{"value":{"request_id":"9c9a1f7b-2a3e-4f4a-9d22-1a2b3c4d5e6f","config_id":"c0nfig1d-aaaa-bbbb-cccc-1111deadbeef","environment":"beta","status":"awaiting_verification","email":"anna.example@partner.test","credential_definition":{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","vct":"urn:ietf:params:oauth:vct:PersonId","name":"Person ID"},"claims":{"given_name":"Anna","family_name":"Example","date_of_birth":"1990-04-12"},"extra_fields":{"purpose":"Account opening"},"admin_filled_fields":["is_employee"],"admin_filled_types":{"is_employee":"boolean"},"admin_filled_required":["is_employee"],"editable_fields":["given_name","family_name","date_of_birth","is_employee"],"editable_field_types":{"given_name":"string","family_name":"string","date_of_birth":"string","is_employee":"boolean"},"editable_field_sources":{"given_name":"user_filled","family_name":"user_filled","date_of_birth":"user_filled","is_employee":"admin_filled"},"identification":{"method":"eid_internal","verified_attributes":{"given_name":"Anna","family_name":"Example","date_of_birth":"1990-04-12"}},"submitted_at":"2026-05-20T14:30:00Z"},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/200/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/400/content/application~1json/example":{"value":{"code":"invalid_argument","message":"X-Org-Id header is required."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/400/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/401/content/application~1json/example":{"value":{"code":"unauthenticated","message":"Missing or invalid Bearer token."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/401/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/403/content/application~1json/example":{"value":{"code":"permission_denied","message":"Token lacks the required scope."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/403/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/404/content/application~1json/example":{"value":{"code":"not_found","message":"Resource not found."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/404/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/429/content/application~1json/example":{"value":{"code":"resource_exhausted","message":"Rate limit exceeded. Retry with backoff."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/429/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/500/content/application~1json/example":{"value":{"code":"internal","message":"An unexpected error occurred."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}/get/responses/500/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example":{"value":{"decision":"approve","admin_claims":{"is_employee":true}},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/requestBody/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/200/content/application~1json/example":{"value":{"request_id":"9c9a1f7b-2a3e-4f4a-9d22-1a2b3c4d5e6f","status":"approved","offer_id":"d4e5f6a7-b8c9-0123-4567-89abcdef0123"},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/200/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/400/content/application~1json/example":{"value":{"code":"invalid_argument","message":"X-Org-Id header is required."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/400/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/401/content/application~1json/example":{"value":{"code":"unauthenticated","message":"Missing or invalid Bearer token."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/401/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/403/content/application~1json/example":{"value":{"code":"permission_denied","message":"Token lacks the required scope."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/403/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/404/content/application~1json/example":{"value":{"code":"not_found","message":"Resource not found."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/404/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/429/content/application~1json/example":{"value":{"code":"resource_exhausted","message":"Rate limit exceeded. Retry with backoff."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/429/content/application~1json/example"},"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/500/content/application~1json/example":{"value":{"code":"internal","message":"An unexpected error occurred."},"id":"paths/~1b2b~1v1~1self-service~1requests~1{requestId}~1decision/post/responses/500/content/application~1json/example"}},"securitySchemeStore":{"BearerAuth":{"id":"BearerAuth","type":"http","scheme":"bearer","bearerFormat":"JWT","description":"DeepAdmin-issued Keycloak access token obtained via the OAuth 2.0\nResource Owner Password Credentials grant against the DeepCloud SSO\nrealm. See the Service Users guide for the exchange flow."}},"servers":[{"url":"/_mock/docs/openapi/self-service-v1","isMockServer":true,"description":"Mock server"},{"url":"https://api.dev.deepcredentials.swiss","description":"Development"},{"url":"https://api.int.deepcredentials.swiss","description":"Integration"}]},"options":{"hideSidebar":true,"mockServer":{"url":"/_mock/docs/openapi/self-service-v1","position":"first","description":"Mock server"},"disableRouter":true,"downloadUrls":[{"url":"/_bundle/docs/openapi/self-service-v1.json?download"},{"url":"/_bundle/docs/openapi/self-service-v1.yaml?download"}],"excludeFromSearch":false,"specType":"openapi","markdocOptions":{"tags":{},"nodes":{},"components":{}},"metadata":{"title":"Self-Service API","description":"Decide on end-user-initiated credential requests"}},"baseSlug":"/docs/openapi/self-service-v1","routesMapping":{}}