Skip to main content

Goal

Onboard an individual customer to Bastion so they can hold digital assets and use conversions and transfers.

Key entities


Flow overview

The steps needed to onboard and transact an individual user are:
  1. Create identity
  2. Submit KYC
  3. Track status
    1. (Conditionally required) Identity verification check
  4. Create account
  5. Start transacting

Simulation for sandbox testing

Refer to sandbox testing and simulations for a guide on how to use simulation labels to simulate both the onboarding and IDV checks to facilitate testing.

Prerequisites

  • You have access to your dashboard
  • You’ve created an API key
  • You’ve registered a webhook

Step 1 – create an individual identity

Create an identity in Bastion as soon as your customer signs up or when they first try to use financial features. Request
Response
Store the returned identity_id alongside your internal customer ID for all future calls.
Tip: Use label for a stable, non-PII identifier (e.g., your internal customer ID). Do not include names, emails, or phone numbers.

Step 2 – submit KYC data

Submit KYC information for the identity. Your platform collects this data and sends it to Bastion. Request
KYC is processed asynchronously. Bastion will update status over time and emit webhook events, or you can poll as described below.

Step 3 – track KYC status

Track KYC status via Typically, most KYC checks are approved within seconds once data is submitted.

Option A: webhooks

Configure a webhook endpoint in the Bastion dashboard to react to KYC status changes in real time. Event: identity_status_update Example event
Use this event to:
  • Mark the customer as approved or failed in your system
  • Enable or block access to financial features

Option B: polling

Poll the identity endpoint as a fallback.
Response (approved)
Key fields
Only proceed to account creation after status = ACTIVE.

Step 3a – identity verification

For a subset of identities undergoing KYC, Bastion may require you to run an additional identity verification (IDV) process. When required, Bastion emits the identity_status_update event.
When IDV is required, create a new IDV by using the endpoint /v2/identities/{identity_id}/id_verification Request
Response
Provide the returned verification_url to the onboarding end user to undergo IDV. Continue polling (or listening to the webhook) for the identity status to turn ACTIVE as the signal for KYC completion.
  • The source of truth for identity status is the identity’s status field — data.identity.status on the identity_status_update webhook, or GET identity. Do not rely on the status of IDV checks

Step 4 – create an account

Once status is ACTIVE, create an account linked to the identity. Use a unique request_id (UUID) as an idempotency key. Reuse the same request_id on retries to avoid duplicate accounts. Request
Capture the account_id. This account is used for:
  • Checking balances
  • On-ramp and off-ramp conversions
  • Crypto transfers

Step 5 – verify setup

Confirm the customer is fully ready:
  1. Check identity statusGET /v2/identities/{identity_id}
  2. Check account — Verify account_ids includes the new account and account_status= ACTIVE
  3. Check balances (optional) — GET /v2/accounts/{account_id}/balances
Next actions:
  • Top up via on-ramp (USD → stablecoin)
  • Send crypto via /v2/crypto/transfers
  • Withdraw via off-ramp (stablecoin → USD)

Implementation notes