{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/guides/sidebars.yaml","api-docs-docs/openapi/verification-v1.yaml":"api-docs-docs/openapi/verification-v1.yaml","api-docs-docs/openapi/credential-offers-v1.yaml":"api-docs-docs/openapi/credential-offers-v1.yaml","api-docs-docs/openapi/credential-invitations-v1.yaml":"api-docs-docs/openapi/credential-invitations-v1.yaml","api-docs-docs/openapi/issued-credentials-v1.yaml":"api-docs-docs/openapi/issued-credentials-v1.yaml","api-docs-docs/openapi/self-service-v1.yaml":"api-docs-docs/openapi/self-service-v1.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","json-schema","openapi-code-sample"]},"type":"markdown"},"seo":{"title":"Webhooks"},"dynamicMarkdocComponents":["openapi"],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"webhooks","__idx":0},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Receive signed notifications when events occur in DeepCredentials, such as a verification session completing or an invitation reaching a terminal state."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":1},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A publicly accessible HTTPS endpoint to receive webhook events."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An API credential whose scope matches the resources you fetch (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deepcredentials.verify"]}," for verification, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deepcredentials.issue"]}," for issuance, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deepcredentials.self-service"]}," for self-service)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"setup","__idx":2},"children":["Setup"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"configure-the-webhook-url-in-the-portal","__idx":3},"children":["Configure the webhook URL in the portal"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Log in to the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://development.eidportal.ch/"},"children":["DeepCredentials"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select your organization."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Navigate to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Settings > Webhooks"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enter your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhook URL"]}," (must be HTTPS)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Save"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The portal generates a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["signing secret"]}," — copy it immediately, it is shown only once. Use it to verify webhook signatures (recommended — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#verifying-signatures"},"children":["Verifying signatures"]}," below)."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Important note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you plan to verify signatures, store the signing secret securely. If you lose it, use ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rotate Secret"]}," to generate a new one."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pick-which-events-to-receive","__idx":4},"children":["Pick which events to receive"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Below the URL the portal renders a checkbox grid grouped by family (Verification / Credential Issuance / Self-Service). Tick only the events your integration cares about — anything you leave unchecked is silently dropped at our edge with ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["no delivery, no retry"]},"."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New webhook configs default to all events checked"]},", so first-time setups receive the same firehose as before."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Existing webhook configs keep their current event set when we add new event types — you have to opt in explicitly. In particular, existing integrations must enable ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential_invitation.status_changed"]}," in the Credential Issuance group before invitation callbacks are sent."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Group-level toggles let you flip an entire family on or off in one click; the header shows ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["All on"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Partial"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["All off"]}," for quick scanning."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Save replaces the full allowlist. There is no separate \"subscribe to event X\" call."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"event-format","__idx":5},"children":["Event format"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every webhook event uses the same envelope. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data"]}," is deliberately slim — only the resource id (and a status hint where the trigger is a status transition). To read claims, captured data, identification details, or any other field, fetch the resource via the linked GET endpoint with your API credential. Webhooks intentionally do ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," carry captured data or PII over the wire."]},{"$$mdtype":"Tag","name":"JsonSchema","attributes":{"schema":{"type":"object","required":["event","tenant_id","timestamp","data"],"properties":{"event":{"type":"string","description":"Event type (same as the X-Webhook-Event header).","example":"verification.completed"},"tenant_id":{"type":"string","format":"uuid","description":"Your organization ID."},"timestamp":{"type":"string","format":"date-time","description":"When the event occurred (RFC 3339 UTC)."},"data":{"type":"object","description":"Slim per-event payload — see Events below."}}},"options":{},"schemaResolved":{"openapi":"3.1.0","components":{"schemas":{"__root":{"type":"object","required":["event","tenant_id","timestamp","data"],"properties":{"event":{"type":"string","description":"Event type (same as the X-Webhook-Event header).","example":"verification.completed"},"tenant_id":{"type":"string","format":"uuid","description":"Your organization ID."},"timestamp":{"type":"string","format":"date-time","description":"When the event occurred (RFC 3339 UTC)."},"data":{"type":"object","description":"Slim per-event payload — see Events below."}}}}}},"schemaResolvedErrors":[]},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"events","__idx":6},"children":["Events"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Event"},"children":["Event"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Trigger"},"children":["Trigger"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"data payload"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data"]}," payload"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Fetch full snapshot"},"children":["Fetch full snapshot"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification.completed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A verification session reached a terminal status."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ session_id, status, credential_status }"]}," where status ∈ ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["success"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expired"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential_status"]}," ∈ ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["valid"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["suspended"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["revoked"]}," (present only when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["success"]},")."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/verification-sessions/{sessionId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuing.status_changed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A credential offer reached a terminal status."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ offer_id, status }"]}," where status ∈ ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issued"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expired"]},"."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/credential-offers/{offerId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential_invitation.status_changed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An invitation was redeemed, expired, or revoked."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ invitation_id, status, offer_id? }"]},"; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["offer_id"]}," is present only for redeemed."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/credential-invitations/{invitationId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential.status_changed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An issued credential's status changed (revoked / suspended / reactivated)."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ credential_id, status }"]}," where status ∈ ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["revoked"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["suspended"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active"]},"."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/issued-credentials/{credentialId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["self_service.request.submitted"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["End-user finished a self-service flow; the request needs your decision. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Only fires for configs with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification_mode: webhook"]},"."]}," See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/guides/self-service/flow"},"children":["Self-Service Detailed Reference"]},"."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ request_id }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/self-service/requests/{requestId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["self_service.request.approved"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A self-service request was approved (any verification mode). Fires regardless of who made the decision, so you have an audit trail."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ request_id }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/self-service/requests/{requestId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["self_service.request.rejected"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A self-service request was rejected (manual or webhook mode). The rejection reason is on the fetched record."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ request_id }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/self-service/requests/{requestId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["self_service.request.credential_issued"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The end-user's wallet accepted the credential — terminal success."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ request_id }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/self-service/requests/{requestId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["self_service.request.offer_expired"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The live credential offer created from an approved request expired before the wallet picked it up. Terminal."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ request_id }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/self-service/requests/{requestId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["self_service.request.failed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A self-service request failed at the wallet-exchange step (typically wallet rejection). Terminal."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ request_id }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/self-service/requests/{requestId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["swiyu.configured"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your organization's swiyu integration became active for an environment. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["System event"]}," — delivered to every configured webhook endpoint regardless of the subscription grid."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ tenant_id, environment, action }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["—"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["swiyu.deconfigured"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your organization's swiyu integration for an environment was removed. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["System event"]}," — always delivered."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ tenant_id, environment, action }"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["—"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," hint on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["*.status_changed"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification.completed"]}," events lets you decide which resource to reconcile. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential_status"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification.completed"]}," lets you distinguish a locked or revoked credential from a clean one before the follow-up GET. A redeemed invitation includes the resulting ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["offer_id"]},", which is the handoff to the normal offer lifecycle. Self-service event names already encode the lifecycle stage, so they only carry ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["request_id"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Invitation callbacks deliberately omit the invitation code, email address, claims, credential values, custom message, and redemption URL. Creation and code rotation do not emit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential_invitation.status_changed"]},"; their synchronous B2B responses are authoritative."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"fetching-event-details","__idx":7},"children":["Fetching event details"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you need the full payload — claims, captured ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credential_subject_data"]},", identification result, admin-claims schema, error fields — call the linked GET endpoint with the resource id from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data"]},". Same access token (and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Org-Id"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Environment"]}," headers) you'd use for any B2B call."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"verification-session","__idx":8},"children":["Verification session"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/openapi/verification-v1"},"children":["Open in API reference →"]}]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"api-docs-docs/openapi/verification-v1.yaml","operationId":"GET:b2b.GetVerificationSession","parameters":{"path":{"sessionId":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"environments":{"https://api.dev.deepcredentials.swiss":{"BearerAuth":"YOUR_ACCESS_TOKEN"}},"environment":"https://api.dev.deepcredentials.swiss","codeSamplesResolved":[{"lang":"shell","title":"curl","source":"curl -i -X GET \\\n  https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/7c9e6679-7425-40de-944b-e07fc1f90ae7 \\\n  -H 'X-Environment: beta' \\\n  -H 'X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08'"},{"lang":"javascript","title":"JavaScript","source":"const sessionId = '7c9e6679-7425-40de-944b-e07fc1f90ae7';\nconst resp = await fetch(\n  `https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/${sessionId}`,\n  {\n    method: 'GET',\n    headers: {\n      'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n      'X-Environment': 'beta'\n    }\n  }\n);\n\nconst data = await resp.text();\nconsole.log(data);"},{"lang":"javascript","title":"Node.js","source":"import fetch from 'node-fetch';\n\nasync function run() {\n  const sessionId = '7c9e6679-7425-40de-944b-e07fc1f90ae7';\n  const resp = await fetch(\n    `https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/${sessionId}`,\n    {\n      method: 'GET',\n      headers: {\n        'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n        'X-Environment': 'beta'\n      }\n    }\n  );\n\n  const data = await resp.text();\n  console.log(data);\n}\n\nrun();"},{"lang":"python","title":"Python","source":"import requests\n\nsession_id = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/\" + session_id\n\nheaders = {\n  \"X-Org-Id\": \"497f6eca-6276-4993-bfeb-53cbbbba6f08\",\n  \"X-Environment\": \"beta\"\n}\n\nresponse = requests.get(url, headers=headers)\n\ndata = response.json()\nprint(data)"},{"lang":"java","title":"Java","source":"import java.net.*;\nimport java.net.http.*;\nimport java.util.*;\n\npublic class App {\n  public static void main(String[] args) throws Exception {\n    var httpClient = HttpClient.newBuilder().build();\n\n    var host = \"https://api.dev.deepcredentials.swiss\";\n    var sessionId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n    var pathname = \"/b2b/v1/verification-sessions/%7BsessionId%7D\";\n    var request = HttpRequest.newBuilder()\n      .GET()\n      .uri(URI.create(host + pathname ))\n      .header(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n      .header(\"X-Environment\", \"beta\")\n      .build();\n\n    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n    System.out.println(response.body());\n  }\n}"},{"lang":"csharp","title":"C#","source":"using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\npublic class Program\n{\n  public static async Task Main()\n  {\n    System.Net.Http.HttpClient client = new()\n    {\n      DefaultRequestHeaders =\n      {\n        {\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\"},\n        {\"X-Environment\", \"beta\"},\n      }\n    };\n\n      var SessionId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n    using HttpResponseMessage request = await client.GetAsync(\"https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/\" + SessionId);\n    string response = await request.Content.ReadAsStringAsync();\n\n    Console.WriteLine(response);\n  }\n}"},{"lang":"php","title":"PHP","source":"/**\n * Requires libcurl\n */\n\nconst sessionId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_HTTPHEADER => [\n    \"X-Environment: beta\",\n    \"X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08\"\n  ],\n  CURLOPT_URL => \"https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/\" . sessionId,\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\ncurl_close($curl);\n\nif ($error) {\n  echo \"cURL Error #:\" . $error;\n} else {\n  echo $response;\n}"},{"lang":"go","title":"Go","source":"package main\n\nimport (\n  \"fmt\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n  sessionId := \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n  reqUrl := \"https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/\" + sessionId\n  req, err := http.NewRequest(\"GET\", reqUrl, nil)\n  if err != nil {\n    panic(err)\n  }\n  req.Header.Add(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n  req.Header.Add(\"X-Environment\", \"beta\")\n  res, err := http.DefaultClient.Do(req)\n  if err != nil {\n    panic(err)\n  }\n  defer res.Body.Close()\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    panic(err)\n  }\n\n  fmt.Println(res)\n  fmt.Println(string(body))\n}"},{"lang":"ruby","title":"Ruby","source":"require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nsession_id = '7c9e6679-7425-40de-944b-e07fc1f90ae7'\nurl = URI('https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/' + session_id)\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest['X-Org-Id'] = '497f6eca-6276-4993-bfeb-53cbbbba6f08'\nrequest['X-Environment'] = 'beta'\n\nresponse = http.request(request)\nputs response.read_body\n"},{"lang":"r","title":"R","source":"library(httr)\n\nsession_id = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n\n# create you own operator\n\"%&%\" <- function(x, y)paste0(x,y)\n\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/verification-sessions/\" %&% session_id\n\ndata_req <- GET(\n  url,\n  add_headers(\"X-Org-Id\" = \"497f6eca-6276-4993-bfeb-53cbbbba6f08\", \"X-Environment\" = \"beta\"),\n  verbose()\n)\n\ncontent(data_req)"}]},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"credential-offer","__idx":9},"children":["Credential offer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/openapi/credential-offers-v1"},"children":["Open in API reference →"]}]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"api-docs-docs/openapi/credential-offers-v1.yaml","operationId":"GET:b2b.GetCredentialOffer","parameters":{"path":{"offerId":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"environments":{"https://api.dev.deepcredentials.swiss":{"BearerAuth":"YOUR_ACCESS_TOKEN"}},"environment":"https://api.dev.deepcredentials.swiss","codeSamplesResolved":[{"lang":"shell","title":"curl","source":"curl -i -X GET \\\n  https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/7c9e6679-7425-40de-944b-e07fc1f90ae7 \\\n  -H 'X-Environment: beta' \\\n  -H 'X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08'"},{"lang":"javascript","title":"JavaScript","source":"const offerId = '7c9e6679-7425-40de-944b-e07fc1f90ae7';\nconst resp = await fetch(\n  `https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/${offerId}`,\n  {\n    method: 'GET',\n    headers: {\n      'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n      'X-Environment': 'beta'\n    }\n  }\n);\n\nconst data = await resp.text();\nconsole.log(data);"},{"lang":"javascript","title":"Node.js","source":"import fetch from 'node-fetch';\n\nasync function run() {\n  const offerId = '7c9e6679-7425-40de-944b-e07fc1f90ae7';\n  const resp = await fetch(\n    `https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/${offerId}`,\n    {\n      method: 'GET',\n      headers: {\n        'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n        'X-Environment': 'beta'\n      }\n    }\n  );\n\n  const data = await resp.text();\n  console.log(data);\n}\n\nrun();"},{"lang":"python","title":"Python","source":"import requests\n\noffer_id = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/\" + offer_id\n\nheaders = {\n  \"X-Org-Id\": \"497f6eca-6276-4993-bfeb-53cbbbba6f08\",\n  \"X-Environment\": \"beta\"\n}\n\nresponse = requests.get(url, headers=headers)\n\ndata = response.json()\nprint(data)"},{"lang":"java","title":"Java","source":"import java.net.*;\nimport java.net.http.*;\nimport java.util.*;\n\npublic class App {\n  public static void main(String[] args) throws Exception {\n    var httpClient = HttpClient.newBuilder().build();\n\n    var host = \"https://api.dev.deepcredentials.swiss\";\n    var offerId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n    var pathname = \"/b2b/v1/credential-offers/%7BofferId%7D\";\n    var request = HttpRequest.newBuilder()\n      .GET()\n      .uri(URI.create(host + pathname ))\n      .header(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n      .header(\"X-Environment\", \"beta\")\n      .build();\n\n    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n    System.out.println(response.body());\n  }\n}"},{"lang":"csharp","title":"C#","source":"using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\npublic class Program\n{\n  public static async Task Main()\n  {\n    System.Net.Http.HttpClient client = new()\n    {\n      DefaultRequestHeaders =\n      {\n        {\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\"},\n        {\"X-Environment\", \"beta\"},\n      }\n    };\n\n      var OfferId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n    using HttpResponseMessage request = await client.GetAsync(\"https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/\" + OfferId);\n    string response = await request.Content.ReadAsStringAsync();\n\n    Console.WriteLine(response);\n  }\n}"},{"lang":"php","title":"PHP","source":"/**\n * Requires libcurl\n */\n\nconst offerId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_HTTPHEADER => [\n    \"X-Environment: beta\",\n    \"X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08\"\n  ],\n  CURLOPT_URL => \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/\" . offerId,\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\ncurl_close($curl);\n\nif ($error) {\n  echo \"cURL Error #:\" . $error;\n} else {\n  echo $response;\n}"},{"lang":"go","title":"Go","source":"package main\n\nimport (\n  \"fmt\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n  offerId := \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n  reqUrl := \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/\" + offerId\n  req, err := http.NewRequest(\"GET\", reqUrl, nil)\n  if err != nil {\n    panic(err)\n  }\n  req.Header.Add(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n  req.Header.Add(\"X-Environment\", \"beta\")\n  res, err := http.DefaultClient.Do(req)\n  if err != nil {\n    panic(err)\n  }\n  defer res.Body.Close()\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    panic(err)\n  }\n\n  fmt.Println(res)\n  fmt.Println(string(body))\n}"},{"lang":"ruby","title":"Ruby","source":"require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\noffer_id = '7c9e6679-7425-40de-944b-e07fc1f90ae7'\nurl = URI('https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/' + offer_id)\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest['X-Org-Id'] = '497f6eca-6276-4993-bfeb-53cbbbba6f08'\nrequest['X-Environment'] = 'beta'\n\nresponse = http.request(request)\nputs response.read_body\n"},{"lang":"r","title":"R","source":"library(httr)\n\noffer_id = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n\n# create you own operator\n\"%&%\" <- function(x, y)paste0(x,y)\n\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-offers/\" %&% offer_id\n\ndata_req <- GET(\n  url,\n  add_headers(\"X-Org-Id\" = \"497f6eca-6276-4993-bfeb-53cbbbba6f08\", \"X-Environment\" = \"beta\"),\n  verbose()\n)\n\ncontent(data_req)"}]},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"credential-invitation","__idx":10},"children":["Credential invitation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/openapi/credential-invitations-v1"},"children":["Open in API reference →"]}]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"api-docs-docs/openapi/credential-invitations-v1.yaml","operationId":"GET:b2b.GetCredentialInvitation","parameters":{"path":{"invitationId":"305ac8b8-299a-4e63-a969-405840e67772"}},"environments":{"https://api.dev.deepcredentials.swiss":{"BearerAuth":"YOUR_ACCESS_TOKEN"}},"environment":"https://api.dev.deepcredentials.swiss","codeSamplesResolved":[{"lang":"shell","title":"curl","source":"curl -i -X GET \\\n  https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/305ac8b8-299a-4e63-a969-405840e67772 \\\n  -H 'X-Environment: beta' \\\n  -H 'X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08'"},{"lang":"javascript","title":"JavaScript","source":"const invitationId = '305ac8b8-299a-4e63-a969-405840e67772';\nconst resp = await fetch(\n  `https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/${invitationId}`,\n  {\n    method: 'GET',\n    headers: {\n      'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n      'X-Environment': 'beta'\n    }\n  }\n);\n\nconst data = await resp.text();\nconsole.log(data);"},{"lang":"javascript","title":"Node.js","source":"import fetch from 'node-fetch';\n\nasync function run() {\n  const invitationId = '305ac8b8-299a-4e63-a969-405840e67772';\n  const resp = await fetch(\n    `https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/${invitationId}`,\n    {\n      method: 'GET',\n      headers: {\n        'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n        'X-Environment': 'beta'\n      }\n    }\n  );\n\n  const data = await resp.text();\n  console.log(data);\n}\n\nrun();"},{"lang":"python","title":"Python","source":"import requests\n\ninvitation_id = \"305ac8b8-299a-4e63-a969-405840e67772\"\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/\" + invitation_id\n\nheaders = {\n  \"X-Org-Id\": \"497f6eca-6276-4993-bfeb-53cbbbba6f08\",\n  \"X-Environment\": \"beta\"\n}\n\nresponse = requests.get(url, headers=headers)\n\ndata = response.json()\nprint(data)"},{"lang":"java","title":"Java","source":"import java.net.*;\nimport java.net.http.*;\nimport java.util.*;\n\npublic class App {\n  public static void main(String[] args) throws Exception {\n    var httpClient = HttpClient.newBuilder().build();\n\n    var host = \"https://api.dev.deepcredentials.swiss\";\n    var invitationId = \"305ac8b8-299a-4e63-a969-405840e67772\";\n    var pathname = \"/b2b/v1/credential-invitations/%7BinvitationId%7D\";\n    var request = HttpRequest.newBuilder()\n      .GET()\n      .uri(URI.create(host + pathname ))\n      .header(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n      .header(\"X-Environment\", \"beta\")\n      .build();\n\n    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n    System.out.println(response.body());\n  }\n}"},{"lang":"csharp","title":"C#","source":"using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\npublic class Program\n{\n  public static async Task Main()\n  {\n    System.Net.Http.HttpClient client = new()\n    {\n      DefaultRequestHeaders =\n      {\n        {\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\"},\n        {\"X-Environment\", \"beta\"},\n      }\n    };\n\n      var InvitationId = \"305ac8b8-299a-4e63-a969-405840e67772\";\n    using HttpResponseMessage request = await client.GetAsync(\"https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/\" + InvitationId);\n    string response = await request.Content.ReadAsStringAsync();\n\n    Console.WriteLine(response);\n  }\n}"},{"lang":"php","title":"PHP","source":"/**\n * Requires libcurl\n */\n\nconst invitationId = \"305ac8b8-299a-4e63-a969-405840e67772\";\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_HTTPHEADER => [\n    \"X-Environment: beta\",\n    \"X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08\"\n  ],\n  CURLOPT_URL => \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/\" . invitationId,\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\ncurl_close($curl);\n\nif ($error) {\n  echo \"cURL Error #:\" . $error;\n} else {\n  echo $response;\n}"},{"lang":"go","title":"Go","source":"package main\n\nimport (\n  \"fmt\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n  invitationId := \"305ac8b8-299a-4e63-a969-405840e67772\";\n  reqUrl := \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/\" + invitationId\n  req, err := http.NewRequest(\"GET\", reqUrl, nil)\n  if err != nil {\n    panic(err)\n  }\n  req.Header.Add(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n  req.Header.Add(\"X-Environment\", \"beta\")\n  res, err := http.DefaultClient.Do(req)\n  if err != nil {\n    panic(err)\n  }\n  defer res.Body.Close()\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    panic(err)\n  }\n\n  fmt.Println(res)\n  fmt.Println(string(body))\n}"},{"lang":"ruby","title":"Ruby","source":"require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\ninvitation_id = '305ac8b8-299a-4e63-a969-405840e67772'\nurl = URI('https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/' + invitation_id)\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest['X-Org-Id'] = '497f6eca-6276-4993-bfeb-53cbbbba6f08'\nrequest['X-Environment'] = 'beta'\n\nresponse = http.request(request)\nputs response.read_body\n"},{"lang":"r","title":"R","source":"library(httr)\n\ninvitation_id = \"305ac8b8-299a-4e63-a969-405840e67772\"\n\n# create you own operator\n\"%&%\" <- function(x, y)paste0(x,y)\n\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/credential-invitations/\" %&% invitation_id\n\ndata_req <- GET(\n  url,\n  add_headers(\"X-Org-Id\" = \"497f6eca-6276-4993-bfeb-53cbbbba6f08\", \"X-Environment\" = \"beta\"),\n  verbose()\n)\n\ncontent(data_req)"}]},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"issued-credential-status-change","__idx":11},"children":["Issued credential (status change)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/openapi/issued-credentials-v1"},"children":["Open in API reference →"]}]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"api-docs-docs/openapi/issued-credentials-v1.yaml","operationId":"GET:b2b.GetIssuedCredential","parameters":{"path":{"credentialId":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"environments":{"https://api.dev.deepcredentials.swiss":{"BearerAuth":"YOUR_ACCESS_TOKEN"}},"environment":"https://api.dev.deepcredentials.swiss","codeSamplesResolved":[{"lang":"shell","title":"curl","source":"curl -i -X GET \\\n  https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/7c9e6679-7425-40de-944b-e07fc1f90ae7 \\\n  -H 'X-Environment: beta' \\\n  -H 'X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08'"},{"lang":"javascript","title":"JavaScript","source":"const credentialId = '7c9e6679-7425-40de-944b-e07fc1f90ae7';\nconst resp = await fetch(\n  `https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/${credentialId}`,\n  {\n    method: 'GET',\n    headers: {\n      'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n      'X-Environment': 'beta'\n    }\n  }\n);\n\nconst data = await resp.text();\nconsole.log(data);"},{"lang":"javascript","title":"Node.js","source":"import fetch from 'node-fetch';\n\nasync function run() {\n  const credentialId = '7c9e6679-7425-40de-944b-e07fc1f90ae7';\n  const resp = await fetch(\n    `https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/${credentialId}`,\n    {\n      method: 'GET',\n      headers: {\n        'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n        'X-Environment': 'beta'\n      }\n    }\n  );\n\n  const data = await resp.text();\n  console.log(data);\n}\n\nrun();"},{"lang":"python","title":"Python","source":"import requests\n\ncredential_id = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/\" + credential_id\n\nheaders = {\n  \"X-Org-Id\": \"497f6eca-6276-4993-bfeb-53cbbbba6f08\",\n  \"X-Environment\": \"beta\"\n}\n\nresponse = requests.get(url, headers=headers)\n\ndata = response.json()\nprint(data)"},{"lang":"java","title":"Java","source":"import java.net.*;\nimport java.net.http.*;\nimport java.util.*;\n\npublic class App {\n  public static void main(String[] args) throws Exception {\n    var httpClient = HttpClient.newBuilder().build();\n\n    var host = \"https://api.dev.deepcredentials.swiss\";\n    var credentialId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n    var pathname = \"/b2b/v1/issued-credentials/%7BcredentialId%7D\";\n    var request = HttpRequest.newBuilder()\n      .GET()\n      .uri(URI.create(host + pathname ))\n      .header(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n      .header(\"X-Environment\", \"beta\")\n      .build();\n\n    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n    System.out.println(response.body());\n  }\n}"},{"lang":"csharp","title":"C#","source":"using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\npublic class Program\n{\n  public static async Task Main()\n  {\n    System.Net.Http.HttpClient client = new()\n    {\n      DefaultRequestHeaders =\n      {\n        {\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\"},\n        {\"X-Environment\", \"beta\"},\n      }\n    };\n\n      var CredentialId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n    using HttpResponseMessage request = await client.GetAsync(\"https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/\" + CredentialId);\n    string response = await request.Content.ReadAsStringAsync();\n\n    Console.WriteLine(response);\n  }\n}"},{"lang":"php","title":"PHP","source":"/**\n * Requires libcurl\n */\n\nconst credentialId = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_HTTPHEADER => [\n    \"X-Environment: beta\",\n    \"X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08\"\n  ],\n  CURLOPT_URL => \"https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/\" . credentialId,\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\ncurl_close($curl);\n\nif ($error) {\n  echo \"cURL Error #:\" . $error;\n} else {\n  echo $response;\n}"},{"lang":"go","title":"Go","source":"package main\n\nimport (\n  \"fmt\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n  credentialId := \"7c9e6679-7425-40de-944b-e07fc1f90ae7\";\n  reqUrl := \"https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/\" + credentialId\n  req, err := http.NewRequest(\"GET\", reqUrl, nil)\n  if err != nil {\n    panic(err)\n  }\n  req.Header.Add(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n  req.Header.Add(\"X-Environment\", \"beta\")\n  res, err := http.DefaultClient.Do(req)\n  if err != nil {\n    panic(err)\n  }\n  defer res.Body.Close()\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    panic(err)\n  }\n\n  fmt.Println(res)\n  fmt.Println(string(body))\n}"},{"lang":"ruby","title":"Ruby","source":"require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\ncredential_id = '7c9e6679-7425-40de-944b-e07fc1f90ae7'\nurl = URI('https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/' + credential_id)\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest['X-Org-Id'] = '497f6eca-6276-4993-bfeb-53cbbbba6f08'\nrequest['X-Environment'] = 'beta'\n\nresponse = http.request(request)\nputs response.read_body\n"},{"lang":"r","title":"R","source":"library(httr)\n\ncredential_id = \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n\n# create you own operator\n\"%&%\" <- function(x, y)paste0(x,y)\n\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/issued-credentials/\" %&% credential_id\n\ndata_req <- GET(\n  url,\n  add_headers(\"X-Org-Id\" = \"497f6eca-6276-4993-bfeb-53cbbbba6f08\", \"X-Environment\" = \"beta\"),\n  verbose()\n)\n\ncontent(data_req)"}]},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"self-service-request","__idx":12},"children":["Self-service request"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/openapi/self-service-v1"},"children":["Open in API reference →"]}]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"api-docs-docs/openapi/self-service-v1.yaml","operationId":"GET:b2b.GetSelfServiceRequest","parameters":{"path":{"requestId":"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8"}},"environments":{"https://api.dev.deepcredentials.swiss":{"BearerAuth":"YOUR_ACCESS_TOKEN"}},"environment":"https://api.dev.deepcredentials.swiss","codeSamplesResolved":[{"lang":"shell","title":"curl","source":"curl -i -X GET \\\n  https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8 \\\n  -H 'X-Environment: beta' \\\n  -H 'X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08'"},{"lang":"javascript","title":"JavaScript","source":"const requestId = '8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8';\nconst resp = await fetch(\n  `https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/${requestId}`,\n  {\n    method: 'GET',\n    headers: {\n      'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n      'X-Environment': 'beta'\n    }\n  }\n);\n\nconst data = await resp.text();\nconsole.log(data);"},{"lang":"javascript","title":"Node.js","source":"import fetch from 'node-fetch';\n\nasync function run() {\n  const requestId = '8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8';\n  const resp = await fetch(\n    `https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/${requestId}`,\n    {\n      method: 'GET',\n      headers: {\n        'X-Org-Id': '497f6eca-6276-4993-bfeb-53cbbbba6f08',\n        'X-Environment': 'beta'\n      }\n    }\n  );\n\n  const data = await resp.text();\n  console.log(data);\n}\n\nrun();"},{"lang":"python","title":"Python","source":"import requests\n\nrequest_id = \"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8\"\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/\" + request_id\n\nheaders = {\n  \"X-Org-Id\": \"497f6eca-6276-4993-bfeb-53cbbbba6f08\",\n  \"X-Environment\": \"beta\"\n}\n\nresponse = requests.get(url, headers=headers)\n\ndata = response.json()\nprint(data)"},{"lang":"java","title":"Java","source":"import java.net.*;\nimport java.net.http.*;\nimport java.util.*;\n\npublic class App {\n  public static void main(String[] args) throws Exception {\n    var httpClient = HttpClient.newBuilder().build();\n\n    var host = \"https://api.dev.deepcredentials.swiss\";\n    var requestId = \"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8\";\n    var pathname = \"/b2b/v1/self-service/requests/%7BrequestId%7D\";\n    var request = HttpRequest.newBuilder()\n      .GET()\n      .uri(URI.create(host + pathname ))\n      .header(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n      .header(\"X-Environment\", \"beta\")\n      .build();\n\n    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n    System.out.println(response.body());\n  }\n}"},{"lang":"csharp","title":"C#","source":"using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\npublic class Program\n{\n  public static async Task Main()\n  {\n    System.Net.Http.HttpClient client = new()\n    {\n      DefaultRequestHeaders =\n      {\n        {\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\"},\n        {\"X-Environment\", \"beta\"},\n      }\n    };\n\n      var RequestId = \"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8\";\n    using HttpResponseMessage request = await client.GetAsync(\"https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/\" + RequestId);\n    string response = await request.Content.ReadAsStringAsync();\n\n    Console.WriteLine(response);\n  }\n}"},{"lang":"php","title":"PHP","source":"/**\n * Requires libcurl\n */\n\nconst requestId = \"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8\";\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_HTTPHEADER => [\n    \"X-Environment: beta\",\n    \"X-Org-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08\"\n  ],\n  CURLOPT_URL => \"https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/\" . requestId,\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\ncurl_close($curl);\n\nif ($error) {\n  echo \"cURL Error #:\" . $error;\n} else {\n  echo $response;\n}"},{"lang":"go","title":"Go","source":"package main\n\nimport (\n  \"fmt\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n  requestId := \"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8\";\n  reqUrl := \"https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/\" + requestId\n  req, err := http.NewRequest(\"GET\", reqUrl, nil)\n  if err != nil {\n    panic(err)\n  }\n  req.Header.Add(\"X-Org-Id\", \"497f6eca-6276-4993-bfeb-53cbbbba6f08\")\n  req.Header.Add(\"X-Environment\", \"beta\")\n  res, err := http.DefaultClient.Do(req)\n  if err != nil {\n    panic(err)\n  }\n  defer res.Body.Close()\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    panic(err)\n  }\n\n  fmt.Println(res)\n  fmt.Println(string(body))\n}"},{"lang":"ruby","title":"Ruby","source":"require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nrequest_id = '8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8'\nurl = URI('https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/' + request_id)\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest['X-Org-Id'] = '497f6eca-6276-4993-bfeb-53cbbbba6f08'\nrequest['X-Environment'] = 'beta'\n\nresponse = http.request(request)\nputs response.read_body\n"},{"lang":"r","title":"R","source":"library(httr)\n\nrequest_id = \"8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8\"\n\n# create you own operator\n\"%&%\" <- function(x, y)paste0(x,y)\n\nurl = \"https://api.dev.deepcredentials.swiss/b2b/v1/self-service/requests/\" %&% request_id\n\ndata_req <- GET(\n  url,\n  add_headers(\"X-Org-Id\" = \"497f6eca-6276-4993-bfeb-53cbbbba6f08\", \"X-Environment\" = \"beta\"),\n  verbose()\n)\n\ncontent(data_req)"}]},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"headers","__idx":13},"children":["Headers"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Header"},"children":["Header"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Event"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Event type (same as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["event"]}," field in body)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Signature"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HMAC-SHA256 hex digest of the raw request body."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Timestamp"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unix timestamp (seconds) of the delivery."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Signature-Previous"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Present during secret rotation grace period."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"verifying-signatures","__idx":14},"children":["Verifying signatures"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every webhook request includes an HMAC-SHA256 signature of the raw request body in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Signature"]}," header. Verifying it is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["strongly recommended"]}," but is your decision — your endpoint will receive the delivery either way. Skipping verification means you have no way to confirm the request actually came from DeepCredentials: HTTPS protects the channel, but anyone who learns your webhook URL (through logs, error trackers, leaked configs, etc.) can hit it directly."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Algorithm:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HMAC-SHA256(signing_secret, raw_request_body)"]}," → hex-encoded."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"bash","__idx":15},"children":["bash"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"EXPECTED=$(echo -n \"$BODY\" | openssl dgst -sha256 -hmac \"$SIGNING_SECRET\" | awk '{print $2}')\nif [ \"$SIGNATURE_HEADER\" = \"$EXPECTED\" ]; then\n  echo \"Valid\"\nfi\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"python","__idx":16},"children":["Python"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import hashlib\nimport hmac\n\ndef verify_signature(body: bytes, secret: str, signature_header: str) -> bool:\n    expected = hmac.new(\n        secret.encode(), body, hashlib.sha256\n    ).hexdigest()\n    return hmac.compare_digest(expected, signature_header)\n\n# In your webhook handler:\nis_valid = verify_signature(\n    body=request.body,\n    secret=\"YOUR_SIGNING_SECRET\",\n    signature_header=request.headers[\"X-Webhook-Signature\"],\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"nodejs","__idx":17},"children":["Node.js"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const crypto = require(\"crypto\");\n\nfunction verifySignature(body, secret, signatureHeader) {\n  const expected = crypto\n    .createHmac(\"sha256\", secret)\n    .update(body)\n    .digest(\"hex\");\n  return crypto.timingSafeEqual(\n    Buffer.from(expected),\n    Buffer.from(signatureHeader)\n  );\n}\n\n// In your webhook handler:\nconst isValid = verifySignature(\n  req.rawBody,\n  \"YOUR_SIGNING_SECRET\",\n  req.headers[\"x-webhook-signature\"]\n);\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"danger","name":"Security"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always use constant-time comparison to prevent timing attacks."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"secret-rotation","__idx":18},"children":["Secret rotation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To rotate the signing secret without dropping events:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rotate Secret"]}," in the portal webhook settings."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Copy the new secret."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["During the grace period, the gateway sends ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["two signature headers"]},":",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Signature"]}," — signed with the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["new"]}," secret."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Signature-Previous"]}," — signed with the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["old"]}," secret."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Update your verification logic to check both headers."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Once your code uses the new secret, remove the old secret from your configuration."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"delivery-behavior-and-reconciliation","__idx":19},"children":["Delivery behavior and reconciliation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhook delivery currently makes one synchronous HTTP attempt. A timeout, connection error, or non-",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," response is logged and then discarded; there is no delivery persistence, retry queue, or replay API. Callbacks can therefore be missed."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Treat every callback as a slim progress hint, not as the authoritative resource or a guaranteed delivery stream. Reconcile through authenticated B2B reads:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Poll or get the verification session and credential offer while your workflow is active."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use invitation list filters and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /b2b/v1/credential-invitations/{invitationId}"]}," to reconcile invitation state."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Do not depend on callbacks arriving in a particular order. The redeemed invitation hint carries ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["offer_id"]}," so you can follow the correct offer independently."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices","__idx":20},"children":["Best practices"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Respond quickly"]}," — Return a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," status within 10 seconds (the delivery timeout). Process the event asynchronously if the work takes longer."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Verify signatures (recommended)"]}," — Validating the HMAC is the only way to confirm the request originated from DeepCredentials. Skipping it is supported but leaves your endpoint trusting any caller who knows the URL."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reconcile from the API"]}," — Fetch the resource through its authenticated GET endpoint before making a final business decision, and use polling or scheduled reconciliation to cover missed callbacks."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Protect captured payloads"]}," — If you retain raw request bodies for signature verification or audit, apply your normal access controls and retention policy even though lifecycle callbacks are slim."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":21},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/guides/verification-flow"},"children":["Verification Flow"]}," — Understand the full session lifecycle."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/guides/error-handling"},"children":["Error Handling"]}," — Handle error events in webhooks."]}]}]},"headings":[{"value":"Webhooks","id":"webhooks","depth":1},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Setup","id":"setup","depth":2},{"value":"Configure the webhook URL in the portal","id":"configure-the-webhook-url-in-the-portal","depth":3},{"value":"Pick which events to receive","id":"pick-which-events-to-receive","depth":3},{"value":"Event format","id":"event-format","depth":2},{"value":"Events","id":"events","depth":3},{"value":"Fetching event details","id":"fetching-event-details","depth":3},{"value":"Verification session","id":"verification-session","depth":4},{"value":"Credential offer","id":"credential-offer","depth":4},{"value":"Credential invitation","id":"credential-invitation","depth":4},{"value":"Issued credential (status change)","id":"issued-credential-status-change","depth":4},{"value":"Self-service request","id":"self-service-request","depth":4},{"value":"Headers","id":"headers","depth":3},{"value":"Verifying signatures","id":"verifying-signatures","depth":2},{"value":"bash","id":"bash","depth":3},{"value":"Python","id":"python","depth":3},{"value":"Node.js","id":"nodejs","depth":3},{"value":"Secret rotation","id":"secret-rotation","depth":2},{"value":"Delivery behavior and reconciliation","id":"delivery-behavior-and-reconciliation","depth":2},{"value":"Best practices","id":"best-practices","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"seo":{"title":"Webhooks"}},"lastModified":"2026-08-19T08:56:28.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/guides/webhooks","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}