Verify a branded guest authentication challenge
View .mdPOST /v1/developer/guest-auth/challenges/{challengeId}/verify
Operation ID: verifyDeveloperGuestAuth
Consumes a single-use challenge only from a branded host authorized through Collection.authorizedDomains, binds the proven Guest and canonical GuestProfile to the same kidSid, and returns guest session tokens to the host BFF. The BFF must set its own branded HttpOnly cookie; Kismet credentials and tokens must never enter browser JavaScript.
Contract status
Section titled “Contract status”| Field | Value |
|---|---|
| Maturity | beta |
| Required capability | guest_auth.write |
| Freshness class | sandbox-write |
| Quota cost | 1 |
| Operational owner | Identity + Developer Experience |
All operations require a Kismet Developer Bearer credential. Collection and resource authority is resolved from the credential’s installation grants; identifiers in the URL never grant access.
Request parameters
Section titled “Request parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
challengeId |
path | string | yes | |
x-kismet-csrf |
header | string | yes | Opaque CSRF proof validated by the same-origin host BFF before it calls Kismet. Never a Kismet credential. |
origin |
header | string | no | Original branded browser origin forwarded by the same-origin BFF. Must match Collection.authorizedDomains. |
x-forwarded-host |
header | string | no | Original branded host fallback for server route handlers that do not forward Origin. Must match Collection.authorizedDomains. |
Request body
Section titled “Request body”The request body is JSON. The canonical schema is:
{ "type": "object", "additionalProperties": false, "required": [ "code", "kidSid" ], "properties": { "code": { "type": "string", "pattern": "^\\d{6}$" }, "kidSid": { "type": "string", "pattern": "^kid_[A-Za-z0-9]{8}$" } }}Minimal example:
{ "code": "042817", "kidSid": "kid_Ab12Cd34"}curl --request POST \ "$KISMET_API_ORIGIN/v1/developer/guest-auth/challenges/CHALLENGE_ID/verify" \ --header "Authorization: Bearer $KISMET_DEVELOPER_API_KEY" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data '{"code":"042817","kidSid":"kid_Ab12Cd34"}'Responses
Section titled “Responses”| Status | Meaning |
|---|---|
| 200 | Success. |
| 400 | Invalid request parameters or body. |
| 401 | Missing, invalid, expired, or inappropriate credential/session. |
| 403 | Credential lacks the required grant/capability, or an origin/CSRF check failed. |
| 409 | Request conflicts with the installation environment or current state. |
| 410 | The single-use authentication challenge is no longer valid. |
| 429 | Rate limit or quota exceeded; inspect response metadata before retrying. |
| 503 | A required Kismet dependency is temporarily unavailable. |
Success example
Section titled “Success example”{ "kidSid": "kid_AbCdEf12", "guest": { "id": "77777777-7777-4777-8777-777777777777", "email": "developer-test@example.com", "guestProfileId": "88888888-8888-4888-8888-888888888888" }, "session": { "accessToken": "<server-only-access-token>", "refreshToken": "<server-only-refresh-token>", "expiresAt": "2026-09-17T18:00:00.000Z" }}