- Docs
- Api%2Freference%2Fwallets%2FPasskeyLoginVerify
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.
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"
}