Complete a passkey step-up
/v1/auth/mfa/step-up/webauthn/verifyCompletes a passkey step-up by verifying the assertion response against the nonce in transit_token and the stored credential, issuing the same step_up_token the code step-up does. Responds 401 when the transit token or assertion is wrong. Rate-limited to 10 requests per minute.
Authentication
Bearer Token
AuthorizationJWT access token. Never send alongside X-API-Key: a request carrying both is refused.
Request body
application/json
transit_tokenstring Required Sealed transit_token from /mfa/step-up/webauthn/options. Carries the WebAuthn challenge nonce server-side.
responseobject Required The PublicKeyCredential JSON returned by `navigator.credentials.get()`.
Responses
application/json
data *MfaStepUpResponseDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Rate limit
10 requests per 1mPer caller: the signed-in user for a bearer token; for an API key, the key and the end user's address when a backend forwards it, otherwise the client address
Returned object
curl -X POST "https://auth.canopy-io.com/v1/auth/mfa/step-up/webauthn/verify" \ -H "Authorization: Bearer $CANOPY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transit_token": "string", "response": {} }'
{ "data": { "step_up_token": "string", "expires_at": "2026-04-20T12:00:00.000Z" } }
Tell us how we can improve this guide.