1. Identity Mfa
BNW CORE SERVICE
  • Card Vaulting
    • Create a card vault session
      POST
  • Fee Lookups
    • Compute fees for a transaction
      POST
  • Intent Action Status Lookups
    • Look up the status of an intent action
      GET
  • Payment Intents
    • Create a payment intent
      POST
    • Cancel a payment intent
      PATCH
    • List payment intents
      GET
    • Retrieve a payment intent
      GET
  • Intent Actions
    • Create an intent action
      POST
    • Advance an intent action to the next step
      PATCH
    • Retrieve the authentication session for a pending redirect action
      GET
  • Accounts
    • Create a new account
      POST
    • List accounts
      GET
    • Close an account
      DELETE
    • Update an account
      PATCH
    • Retrieve an account
      GET
    • Retrieve an account's daily payout limit status
      GET
  • API Keys
    • Create an API key
      POST
    • List API keys
      GET
    • Update an API key
      PATCH
    • Retrieve an API key
      GET
    • Revoke an API key
      DELETE
    • Rotate an API key's secret
      POST
  • App Setting Values
    • Delete an app setting value
    • Retrieve an app setting value
    • List app setting values
    • Create or update an app setting value
  • Entities
    • Create an entity
    • List entities
    • Close an entity
    • Update an entity
    • Retrieve an entity
    • Set the selected entity
    • Retrieve public metadata for the authenticated entity
    • Create an entity sandbox session
    • Retrieve one of your entities, including your membership
    • List my entities
  • Counterparties
    • Create a counterparty
    • List counterparties
    • Update a counterparty
    • Retrieve a counterparty
  • Maker Checker Approver Groups
    • Create a maker-checker approver group
    • List maker-checker approver groups
    • Deactivate a maker-checker approver group
    • Update a maker-checker approver group
    • Retrieve a maker-checker approver group
  • Bulk Payout Intent Actions
    • Create bulk payout intent actions
    • Retrieve a bulk payout intent action batch
    • Preview bulk payout intent actions
  • Payout Intent Action Retries
    • Retry a failed payout intent action
  • Payout Intent Actions
    • Create a payout intent action
    • List payout intent actions
    • Retrieve a payout intent action
  • Payout Intents
    • Create a payout intent
    • List payout intents
    • Retrieve a payout intent
    • Edit a payout intent
    • Cancel a payout intent's active schedule
    • Edit a payout intent's active schedule
    • Cancel a payout intent
  • Virtual Cards
    • Create a virtual card
    • List virtual cards
    • Update a virtual card
    • Retrieve a virtual card
  • Maker Checker Action Decisions
    • Record a decision on a maker-checker action
  • Maker Checker Actions
    • Retrieve a maker-checker action's status
    • List maker-checker actions
    • Withdraw a maker-checker action
  • Payment Pages
    • Create a payment page
    • List payment pages
    • Delete a payment page
    • Edit a payment page
    • Retrieve a payment page
    • Retrieve a published payment page by slug
  • Invoices
    • Create an invoice
    • List invoices
    • Retrieve an invoice
    • Edit an invoice
    • Retrieve an invoice as a PDF
    • Download a public invoice as a PDF
    • Retrieve a public invoice by invoice number
    • Send a reminder for an invoice
    • Send or resend an invoice
  • Entity Data
    • Retrieve the data submission checklist for an entity
    • Submit entity data for KYC requirements
    • List entity data
    • Review and decide on entity data submission
  • Unified Verifs
    • Proxy a DELETE request to the Verification API
    • Proxy a GET request to the Verification API
    • Proxy a PATCH request to the Verification API
    • Forward a POST request to the Verification API
  • Identity Session
    • List identity sessions
    • Complete the MFA step of a pending login session
    • Request a login MFA challenge or one-time-passcode
  • Identity Sessions
    • Terminate all active sessions for an identity
    • Terminate an identity session
  • Entity Sandboxes
    • Create an additional named entity sandbox
    • Delete an entity sandbox
    • Rename an entity sandbox
  • Identity Mfa
    • Passkeys
    • Enroll a new MFA method for the authenticated identity
      POST
    • List MFA methods for the authenticated identity
      GET
    • Retrieve an identity MFA method
      GET
    • Advance or transition the state of an existing MFA method
      PATCH
  • Auth
    • Log in with email and password
    • Register a new identity
    • Request an email verification link
    • Verify an email address
    • Request a password reset
    • Complete a password reset with a one-time token
    • Change the authenticated identity's password
    • Confirm a pending email address change
    • Request a change of the authenticated identity's email address
    • Resend an identity-confirmation email
    • Confirm a phone number change for the current identity
    • Request a phone number change for the current identity
  • Virtual Card Actions
    • Perform an action on a virtual card
  • ACLs
    • List all ACL definitions
  • Account Transfers
    • Create an account transfer
    • List account transfers
    • Retrieve an account transfer
  • ACL Roles
    • List all ACL roles
  • Counterparty Instruments
    • Add a bank account to a counterparty
    • List counterparty instruments
    • Remove a counterparty's bank account
  • Currency Conversion Quotes
    • Create a currency conversion quote
  • Entity Access
    • Change a team member's role on an entity
    • Remove a member's access to an entity
    • List an entity's team members
  • Entity Access Invites
    • Accept an entity access invitation
    • Invite a new member to an entity
    • List entity access invites
    • Revoke an entity access invite
  • Entity Ownership Transfers
    • Transfer ownership of an entity
  • Identity
    • Update the authenticated identity's name
    • Retrieve the authenticated identity
  • Money Action Confirmations
    • Confirm a money-moving action with PIN (and, where required, an authenticator code)
  • Payout Intent Action Returns
    • Record a payout intent action as returned
  • Payout Intent Action Status Logs
    • List a payout intent action's status history
  • Payout Intent Schedule Actions
    • Apply an action to a payout intent's schedule
  • Sandbox
    • Credit test money into an entity's sandbox wallet
    • Reset a shadow entity's sandbox
    • Get or create the sandbox identity for the authenticated identity
    • Provision a sandbox identity and master API key
    • Exchange the sandbox master API key for a login session
    • Fund an entity's test wallet with sandbox test money
  • Transactions
    • Retrieve a transaction
    • List transactions
  • Virtual Card Activity
    • List a virtual card's activity
  • Virtual Card Sessions
    • Create a virtual card viewing session
  • Virtual Card Topups
    • Top up a virtual card
  • Virtual Card Transaction Callbacks
    • Handle an inbound virtual card transaction callback
  • Virtual Card Withdrawals
    • Withdraw funds from a virtual card
  • Schemas
    • ErrorResponse
    • SuccessResponse
    • AccountBalance
    • Account
  1. Identity Mfa

Enroll a new MFA method for the authenticated identity

POST
/identity-mfas
Begin enrollment of a multi-factor authentication method (email-mobile, authenticator, secure-pin, or passkey) for the authenticated identity. The identity is always taken from the authenticated session's JWT — it can never be supplied in the request body. Uniqueness is enforced per identity_id + type + a type-specific medium reference: for email-mobile, authenticator, and secure-pin the medium reference is the type itself, so an identity may only ever have one record of each of those types (enrolling one twice returns 409); for passkey the medium reference is device_id, so an identity may register multiple passkeys, one per distinct device, and only re-registering the same device_id returns 409. Behavior, starting status, and contexts (where the method is enforced) differ by type: email-mobile, authenticator, and passkey start in pending status, are scoped to the login context, and must be verified/activated through the corresponding verification flow before they are enforced on login. secure-pin starts immediately in active status (no separate activation step) and is scoped to the payout context, used to authorize payouts rather than logins. For email-mobile, email is required and a one-time verification code is immediately emailed to that address (expires in 5 minutes); the response's provisioning field is null. For authenticator, the service generates a new TOTP secret, builds an otpauth:// provisioning URI, and renders it as a QR code — these are returned once in the provisioning field of this response only and are never retrievable again, so the client must capture and display them immediately (e.g. for the user to scan with an authenticator app or manually enter the secret). For passkey, device_id is required (device_name is an optional display label); the service returns a WebAuthn PublicKeyCredentialCreationOptions object once in the provisioning field, which the client must pass directly into navigator.credentials.create() to complete registration with the browser/authenticator — the accompanying challenge expires after 5 minutes. For secure-pin, pin (a 6-digit code) and exactly 2 distinct security_questions (with answers) are required; the PIN is rejected as weak if it is all one digit or a sequential run (e.g. 111111, 123456, 654321), and a fresh set of 10 one-time backup codes is generated and returned once in the backup_codes field — these plaintext codes are never retrievable again, so the client must capture and display them immediately.

Request

Authorization
JWT Bearer
Add the parameter
Authorization
to Headers
Example:
Authorization: ********************
or
Body Params application/jsonRequired

Examples

Responses

🟢201
application/json
The MFA method was created. email-mobile, authenticator, and passkey methods are created in pending status; secure-pin methods are created directly in active status. For authenticator methods, the one-time provisioning secret and QR code are included; for passkey methods, a one-time WebAuthn provisioning registration payload is included for the client to complete with navigator.credentials.create(); for secure-pin methods, one-time plaintext backup_codes are included. All of these must be captured now — none is ever retrievable again.
Bodyapplication/json

🟠400
🟠401
🟠409
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location '/identity-mfas' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
    "type": "authenticator"
}'
Response Response Example
201 - Response for an authenticator (TOTP) enrollment
{
    "message": "Identity MFA created successfully",
    "status": "success",
    "data": {
        "id": "01HXYZ1234567890ABCDEFGHIJ",
        "identity_id": "01HABC9876543210ZYXWVUTSRQ",
        "type": "authenticator",
        "status": "pending",
        "contexts": [
            "login"
        ],
        "system_meta": {
            "email": null,
            "mobile": null,
            "security_questions": null,
            "has_backup_codes": false,
            "passkey": null
        },
        "provisioning": {
            "secret": "JBSWY3DPEHPK3PXP",
            "otpauth_url": "otpauth://totp/FLW%20BNW:jane.doe@example.com?secret=JBSWY3DPEHPK3PXP&issuer=FLW%20BNW",
            "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
        },
        "backup_codes": null,
        "created": 1722869520000,
        "updated": 1722869520000
    }
}
Modified at 2026-09-30 00:29:30
Previous
Passkeys
Next
List MFA methods for the authenticated identity
Built with