navigator.credentials.create(), then call Finish WebAuthn registration within 10 minutes.
Pacifica accepts passkeys only from the Pacifica app. A script or bot cannot register one. API clients should use an authenticator app. See Passkeys and security keys.
Operation Type (for Signing)
Request Body
| Field | Type | Need | Description | Example |
|---|---|---|---|---|
”account” | string | required | User’s wallet address | 42trU9A5… |
“signature” | string | required | Cryptographic signature | 5j1Vy9Uq… |
“timestamp” | integer | required | Current timestamp in milliseconds | 1716200000000 |
”kind” | string | required | Factor kind:“passkey""security_key” | security_key |
”label” | string | required | Your name for the factor. 1 to 64 characters, with no control characters and no leading or trailing spaces | YubiKey 5C |
”expiry_window” | integer | optional | Signature expiry in milliseconds | 30000 |
”two_factor” | object | conditional | Proof. Required while 2FA is on. Not part of the signed payload. See Proofs |
two_factor. Any proof type works, including a recovery key. After the proof passes, you can send the same request with the same kind and label again for 5 minutes without a new proof. This helps when the user cancels the browser prompt.
A "passkey" must verify the user with a PIN or biometric. A "security_key" asks the browser for a separate device, such as a USB or NFC key. The device names the new credential with a short form of your wallet address and your label.
Signing
Signkind and label as the data object. Do not sign two_factor. For the request above, the message to sign is:
Response
- Status 200: Registration started
options above are shortened.
- Status 400: Invalid request parameters, label, or signature
- Status 401: The proof is wrong, expired, or already used
- Status 403: The account is a subaccount, or it does not exist
- Status 422: The account has no room for another factor (
a user can have at most 8 factors) - Status 428: 2FA is on, and the request has no
two_factor - Status 429: Too many proof attempts, or more than 20 enrollments started in 10 minutes
- Status 500: Internal server error
- Status 503: The two-factor service is unavailable. Retry later