Overview
This guide covers the complete flow for onboarding a new user (subaccount), including creation and verification. To onboard a new user, you must create a subaccount. This is the first step before they can deposit funds or perform any banking operations.Request
To create a subaccount, send aPOST request to /v1/ramp/subaccount with the user’s email address.
Response
The API will return the newly created subaccount’s details, including its uniqueid.
Webhooks
When a subaccount is created, you will receive asubaccount.status.created event.
Retrieving a Subaccount
You can check the balance and status of a subaccount at any time.Request
Response
The response includes the current balance and verification status.Listing Subaccounts
To view all your users, you can retrieve a paginated list of subaccounts.Request
Verification Status Lifecycle
Understanding the status transitions helps you build robust verification flows and handle webhook events correctly.Status Flow Diagram
Status Descriptions
| Status | Description | Webhook Event | Next Steps |
|---|---|---|---|
| created | Subaccount exists but no verification submitted | subaccount.status.created | Submit verification documents |
| incomplete | Documents submitted but missing information or rejected with retry allowed | None (or subaccount.status.declined with can_resubmit: true) | Review failure reason and resubmit |
| review | Verification documents under review | subaccount.status.review | Wait for approval/decline |
| approved | Verification successful, currencies unlocked | subaccount.status.approved | Full access to unlocked currencies |
| declined | Verification rejected | subaccount.status.declined | Check can_resubmit flag and failure_reason |
When
declined status includes can_resubmit: false, the subaccount cannot retry verification. This typically occurs for serious issues like document forgery.Individual vs Business Verification
Bullring supports two verification types. The type you choose determines the required documents and the verification flow.Individual Verification
Individual verification is for personal accounts and follows a standard KYC (Know Your Customer) process. Verification Type:"individual"
Required Documents:
- Government-issued ID (passport, national ID card, or driver’s license)
- For two-sided IDs: both front and back images
- Proof of address (utility bill, bank statement, or government letter dated within 3 months)
- Submission →
reviewstatus: Immediate review→approved/declined: Less than 60 seconds (automated)
- Base currencies and payment rails (see Currency Unlocking section below)
- Standard transaction limits
Business Verification
Business verification is for corporate accounts and follows a KYB (Know Your Business) process with additional requirements. Verification Type:"business"
Required Documents:
- Business registration certificate
- Articles of incorporation
- Proof of business address
- Ultimate Beneficial Owner (UBO) identification documents
- Director/officer identification documents
awaiting_ubo- Specific to business verification when UBO information is pending
- Submission →
reviewstatus: Immediate review→approved/declined: Less than 60 seconds (automated)
- Enhanced currencies and payment rails (see Currency Unlocking section below)
- Higher transaction limits
- Institutional features (dedicated support, enhanced rates)
Currency & Rail Unlocking
Different verification levels unlock different currencies and payment rails. As your subaccount progresses through verification, you’ll receive webhook events and gain access to new capabilities.Verification Levels
Base Verification (Individual/Standard KYC): After completing individual verification, the following currencies become available:| Currency | Code | Payment Rails | Named Account | Notes |
|---|---|---|---|---|
| Nigerian Naira | NGN | NIBBS | ✓ | Instant settlement |
| Ghana Cedi | GHS | Mobile Money | Instant settlement | |
| Zambian Kwacha | ZMW | Mobile Money | Instant settlement | |
| Brazilian Real | BRL | PIX | Instant settlement, offramp only |
| Currency | Code | Payment Rails | Named Account | Settlement Time | Notes |
|---|---|---|---|---|---|
| US Dollar | USD | ACH, Wire, SWIFT | ✓ | ACH: 1 day, Wire: 1 hour, SWIFT: 2-5 days | 1:1 parity with USDC/USDT |
| Euro | EUR | SEPA | Instant | ||
| British Pound | GBP | FPS | ✓ | Instant | |
| UAE Dirham | AED | UAEFTS | ✓ | Instant | |
| Chinese Yuan | CNY | Bank Transfer | Varies | Offramp only |
- USDC (USD Coin) - Ethereum, Solana, Celo, Polygon, Tron
- USDT (Tether) - Ethereum, Solana, Celo, Polygon, Tron
- EURC (Euro Coin) - Ethereum, Solana, Celo, Polygon
- BTC (Bitcoin) - Lightning Network
Webhook Events on Currency Unlock
When a subaccount is approved, thesubaccount.status.approved webhook includes a detailed capabilities object that shows exactly which currencies, rails, and crypto assets are unlocked. See the Subaccount Approved webhook section below for complete examples.
The capabilities object includes:
kyc.profiles: List of approved countries (e.g., NG, GH, ZM, US, EU)capabilities.currencies: Each currency’s status (approved,locked,partial) and available operationscapabilities.assets: Crypto assets and their supported networks
For the complete list of supported currencies and their characteristics, see Supported Currencies & Rails.
Verification Webhook Events
Bullring sends webhook events at each stage of the verification process. Configure your webhook endpoint to receive these events and update your application state accordingly.Subaccount Created
Sent immediately when a new subaccount is created, before any verification is submitted.Subaccount In Review
Sent when verification documents are submitted and the review process begins.Subaccount Approved
Sent when verification is successful. The webhook includes a detailedcapabilities object showing which currencies, rails, and assets are now available to the subaccount.
Initial Approval (Base Verification)
When a subaccount completes initial verification, they receive access to base currencies based on their approved KYC profiles:approved: Full access - all operations enabled for this currencylocked: No access - additional verification required (seerequiredKycfield)partial: Limited access - some operations available, others restricted
Enhanced Approval (Additional Verification)
When a subaccount completes additional verification (e.g., for US/EU operations), they receive an updated webhook with newly unlocked currencies:Important: Each time a subaccount gains approval for new countries/regions, you’ll receive a new
subaccount.status.approved webhook with updated capabilities. Store the latest capabilities object to determine which operations are available.Subaccount Declined (Can Retry)
Sent when verification fails but the subaccount can resubmit documents. Thefailure_reason field explains what went wrong.
BAD_PROOF_OF_ADDRESS- Proof of address document is invalid or unreadableINCOMPLETE_DOCUMENT- Document is missing required informationPOOR_IMAGE_QUALITY- Document image quality is too low to verifyEXPIRED_DOCUMENT- Document has passed its expiration dateDOCUMENT_MISMATCH- Information on documents does not match
Subaccount Declined (Final)
Sent when verification is permanently declined. The subaccount cannot retry verification.FORGERY- Document appears to be forged or tampered withBLACKLISTED- Individual or entity is on a sanctions or watchlistFRAUDULENT_ACTIVITY- Fraudulent activity detectedDUPLICATE_ACCOUNT- User already has an existing verified account
For complete webhook configuration instructions, including signature verification, see Webhook Introduction and Subaccount Events.
Next Steps & Features
Once a subaccount is created, you can access the full suite of Bullring’s financial features for that user. Most of these operations require the subaccount to complete Verification.1. Verification (KYC/KYB)
Before a subaccount can transact, they must verify their identity. See the detailed sections above for:- Verification Status Lifecycle - Status transitions and webhook events
- Individual vs Business Verification - Document requirements and timelines
- Currency & Rail Unlocking - Which currencies unlock at each verification level
- Verification Webhook Events - Complete webhook event reference
Institutional accounts may receive enhanced rates, higher limits, and dedicated support.
2. Deposits (On-Ramp)
Subaccounts can fund their balances using various methods:- Fiat: Local bank transfers, Mobile Money (e.g., NGN, GHS, ZMW).
- Crypto: On-chain transfers (ETH, SOL) or Lightning Network (BTC).
- See Deposits API
3. Withdrawals (Off-Ramp)
Subaccounts can withdraw their funds to:- Fiat Recipients: Wire transfers (USD, EUR), PIX (BRL), Mobile Money.
- Crypto Wallets: Stablecoins (USDC, USDT) or Bitcoin.
- See Withdrawals API