Instances

Send passkey (WebAuthn) pairing response

Second step of passkey pairing. When WhatsApp offers passkey-based device linking, your webhook receives `pair.passkey_request` carrying the WebAuthn challenge (`public_key`). Resolve it in the account owner's authenticator — in a browser, `navigator.credentials.get({ publicKey })` — and submit the resulting credential here. WUTS forwards it to WhatsApp; on success the `pair.passkey_confirmation` webhook delivers a verification code to show the user.

POST
/passkey/response

Second step of passkey pairing. When WhatsApp offers passkey-based device linking, your webhook receives pair.passkey_request carrying the WebAuthn challenge (public_key). Resolve it in the account owner's authenticator — in a browser, navigator.credentials.get({ publicKey }) — and submit the resulting credential here. WUTS forwards it to WhatsApp; on success the pair.passkey_confirmation webhook delivers a verification code to show the user.

Authorization

bearerAuth
AuthorizationBearer <token>

Per-user API token (UUID v4) sent as Authorization: Bearer <token>. Identifies the tenant and user.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/passkey/response" \  -H "Content-Type: application/json" \  -d '{    "device_id": "wuts-device-001",    "response": {      "id": "nGViU9nFzQmp7VpAkFyxWQ",      "rawId": "nGViU9nFzQmp7VpAkFyxWQ",      "type": "public-key",      "response": {        "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiM3EyLTd3In0",        "authenticatorData": "SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2M",        "signature": "MEUCIQDKp7C0mXo1Zq7T0YV0Zi5cW5mF9pJb3E0m1o6r7wIgYt2c",        "userHandle": null      }    }  }'
{  "success": true,  "data": {    "status": "passkey_response_sent",    "device_id": "wuts-device-001",    "next": "wait for the pair.passkey_confirmation webhook, show the code to the user, then POST /passkey/confirmation"  }}
{  "success": false,  "error": "response.response.signature is required"}
{  "success": false,  "error": "unauthorized"}
{  "success": false,  "error": "no active pairing session — start pairing via /qr or /paircode and wait for the pair.passkey_request webhook"}
{  "success": false,  "error": "failed to send passkey response: websocket disconnected"}