Finish signing in with a passkey

Step two of signing in a user with a passkey. Serialize what `navigator.credentials.get()` returned with `assertion.toJSON()` and send that JSON here. We recognise the passkey, check the signature against the one we stored when it was created, and confirm it was used in this browser, for us, just now and only once. Then we sign the person in. No sign-in needed — this is the sign-in.

POST
/wallets/connect/passkey/login/verify

Request Body

application/json

Browser credential JSON produced by assertion.toJSON().

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://api.dual.network/wallets/connect/passkey/login/verify" \  -H "Content-Type: application/json" \  -d '{    "id": "example_credential_id",    "rawId": "example_credential_id",    "type": "public-key",    "response": {      "clientDataJSON": "<base64url-encoded client data>",      "authenticatorData": "<base64url-encoded authenticator data>",      "signature": "<base64url-encoded signature>",      "userHandle": "<base64url-encoded user handle>"    }  }'
{
  "wallet": {
    "id": "665f1c2d4b1a2c3d4e5f6a01",
    "fqdn": "dual.network",
    "email": "alex@example.com",
    "nickname": "alexf",
    "language": "en",
    "activated": true,
    "disabled": false,
    "account": {
      "address": "0x1234567890abcdef1234567890abcdef12345678",
      "type": "SMART_WALLET",
      "controller": {
        "address": "0x9876543210fedcba9876543210fedcba98765432",
        "type": "WEBAUTHN",
        "custody": "self-custodial"
      },
      "smart_account": {
        "chain_id": 42161,
        "factory": "0x7777777777777777777777777777777777777777",
        "implementation": "0x8888888888888888888888888888888888888888",
        "index": 0,
        "validator": "0x9999999999999999999999999999999999999999",
        "validator_type": "WEBAUTHN",
        "version": "0.3.1"
      }
    },
    "when_created": "2026-02-01T09:00:00Z",
    "when_modified": "2026-02-01T09:00:00Z"
  },
  "access_token": "<access token>",
  "refresh_token": "<refresh token>"
}
{
  "code": 3,
  "message": "Key: 'limit' Error:Field validation for 'limit' failed on the 'lte' tag"
}
{
  "code": 3,
  "message": "limit must be 25 or less",
  "details": {}
}
{
  "code": 13,
  "message": "internal error"
}