Documentation

WebAuthn / Passkeys

Passwordless authentication with passkeys

List Passkeys

View all registered passkeys for your account.

Endpoint

GET/auth/admin/webauthn/credentials

List all WebAuthn credentials (passkeys) registered for the authenticated admin.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}

Response- List of passkeys

json
{
  "credentials": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "label": "MacBook Pro Touch ID",
      "transports": [
        "internal"
      ],
      "sign_count": 42,
      "last_used_at": "2025-01-14T10:30:00Z",
      "created_at": "2025-01-01T00:00:00Z"
    },
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "label": "YubiKey 5",
      "transports": [
        "usb",
        "nfc"
      ],
      "sign_count": 15,
      "last_used_at": "2025-01-10T08:00:00Z",
      "created_at": "2025-01-05T00:00:00Z"
    }
  ]
}

Register Passkey

Register a new passkey for passwordless authentication.

Endpoint

POST/auth/admin/webauthn/credentials

Register a new WebAuthn credential after completing browser-side registration ceremony.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}
Content-TypestringYesapplication/json

Request Body- WebAuthn registration data from browser

json
{
  "credential_id": "base64_encoded_credential_id",
  "public_key": "base64_encoded_public_key",
  "sign_count": 0,
  "label": "My MacBook Touch ID",
  "transports": [
    "internal"
  ]
}

Response- Registered credential

json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "label": "My MacBook Touch ID",
  "transports": [
    "internal"
  ],
  "sign_count": 0,
  "created_at": "2025-01-14T10:30:00Z"
}

Error Responses

StatusCodeDescription
400validation_failedInvalid base64 encoding or missing required fields
429rate_limit_exceededRate limit: 10/min, 100/day

Request Body Parameters

FieldTypeRequiredDescription
credential_idstringYesBase64-encoded credential ID from WebAuthn
public_keystringYesBase64-encoded public key
sign_countintegerYesInitial signature counter (usually 0)
labelstringNoHuman-readable label for the passkey
transportsarrayNoTransport methods: usb, nfc, ble, internal

Verify Registration

Verify a WebAuthn credential registration.

Endpoint

POST/auth/admin/webauthn/verify

Verify WebAuthn credential registration by performing an assertion.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}
Content-TypestringYesapplication/json

Request Body- Verification data

json
{
  "credential_id": "base64_encoded_credential_id",
  "sign_count": 1
}

Response- No content on success (HTTP 204)

json

Error Responses

StatusCodeDescription
401webauthn_verify_failedWebAuthn verification failed

Login with Passkey

Authenticate using a registered passkey.

Endpoint

POST/auth/admin/webauthn/login

Complete MFA using WebAuthn passkey authentication.

Headers

ParameterTypeRequiredDescription
Content-TypestringYesapplication/json

Request Body- WebAuthn assertion data

json
{
  "pending_token": "pending_token_from_login",
  "credential_id": "base64_encoded_credential_id",
  "sign_count": 43
}

Response- Authentication tokens

json
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2g...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Error Responses

StatusCodeDescription
401webauthn_login_failedWebAuthn authentication failed
429mfa_lockedToo many failed attempts (10/min, 100/day)

Delete Passkey

Remove a registered passkey.

Endpoint

DELETE/auth/admin/webauthn/credentials/{credentialID}

Delete a WebAuthn credential. Cannot delete the last credential if MFA is required.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}

Path Parameters

ParameterTypeRequiredDescription
credentialIDstringYesUUID of the credential to delete

Response- No content on success (HTTP 204)

json

Error Responses

StatusCodeDescription
404not_foundCredential not found
400cannot_delete_lastCannot delete last MFA method

Supported Transports

WebAuthn transport methods supported by the platform.

Transport Types

TransportDescriptionExamples
internalPlatform authenticatorTouch ID, Face ID, Windows Hello
usbUSB security keyYubiKey, SoloKey
nfcNFC-enabled deviceYubiKey NFC, phone tap
bleBluetoothBluetooth security keys
hybridCross-devicePhone as authenticator for computer