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 customer are:- Create identity
- Submit KYC
- Track status
- (Conditionally required) Identity verification check
- Create account
- 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
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. RequestStep 3 – track KYC status
Track KYC status viaidentity_status_updatewebhooks (recommended) or- polling via
GET /v2/identities/{identity_id}
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
- 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.
Only proceed to account creation after status = ACTIVE.
Terminal KYC statuses
A KYC attempt resolves to one of two terminal statuses:
Any other
status (for example PENDING_ONBOARDING) means the attempt is still in progress. Keep listening for identity_status_update events or continue polling. For the full list of identity statuses, see Identities and accounts.
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 theidentity_status_update event.
/v2/identities/{identity_id}/id_verification.
Request
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
statusfield:data.identity.statuson theidentity_status_updatewebhook, or GET identity. Do not rely on the status of IDV checks.
Step 4 – create an account
Oncestatus 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
account_id. Use this account for:
- Checking balances
- On-ramp and off-ramp conversions
- Crypto transfers
Step 5 – verify setup
Confirm the customer is fully ready:- Check identity status —
GET /v2/identities/{identity_id} - Check account — Verify
account_idsincludes the new account andaccount_status = ACTIVE - Check balances (optional) —
GET /v2/accounts/{account_id}/balances
- Top up via on-ramp (USD → stablecoin)
- Send crypto via
/v2/crypto/transfers - Withdraw via off-ramp (stablecoin → USD)