Initiate a Blockchain Payout
On-ramp payout
Creating a payout is where everything comes together, turning your setup into real value movement. Once your destination is ready, you can initiate a payout to spend your fiat balance and receive stablecoin at the selected blockchain address.
flowchart LR S((Start)):::start --> A([👤 1. Create a Profile]):::step --> B([🛡️ 2. Whitelist Blockchain Address]):::step --> C([💸 3. Create Payout]):::highlight %% Base theme (your primary) classDef step fill:#C7E5DE,stroke:#5FA8A0,color:#1F3C3A,stroke-width:2px,rx:14,ry:14; %% Highlighted step (only step 3) classDef highlight fill:#A8DCD1,stroke:#2F7F77,color:#0F2F2D,stroke-width:3px,rx:16,ry:16; %% Start marker classDef start fill:#FFFFFF,stroke:#2F7F77,color:#0F2F2D,stroke-width:2px; %% “Journey line” (thicker path) linkStyle 0 stroke:#2F7F77,stroke-width:3px; linkStyle 1 stroke:#2F7F77,stroke-width:3px; linkStyle 2 stroke:#2F7F77,stroke-width:3px;
Payouts
Endpoint
https://www.bankingcircleconnect.com/api/v1/digital-assets/payouts
PurposeInitiates a payout to convert fiat into stablecoin and send it to a blockchain address.
UsageUse this endpoint to create a payout once the destination address has been whitelisted. Always include an idempotency key to safely retry requests without creating duplicate transactions.
Notes
The address must be whitelistedAn idempotency key is required
Only one of the following parameters may be provided:
fromAmounttoAmount
Auto Currency ConversionWhen initiating a payout, you must provide both the account number and the currency associated with that account. The account specified in
from.accountNumbermust hold sufficient funds in the fiat currency pegged to the requested stablecoin. The system does not support automatic currency conversion currently. If the required currency is unavailable or insufficient, the payout request will be rejected.
Insufficient BalanceIf the account has insufficient balance overall, the payout will move to a Missing Funding status for up to 2 business days until the account is topped up, otherwise the request will be cancelled
Request body
If you know the fiat amount to convert, provide it in fromAmount:
| Field | Type | Required | Description | Validation / Rules |
|---|---|---|---|---|
| from.accountNumber | string | Yes | Source fiat account | 10-digit Banking Circle account number |
| to.addressId | string | Yes | Whitelisted address ID | Must reference approved address |
| to.networkCurrencyCode | string | Yes | Asset + network (e.g. ETHEREUM_USDC) | Must be supported pair |
| amount.fromAmount | string | Yes | Fiat amount to convert | Specify how much fiat to convert |
| amount.toAmount | string | Leave empty | Target crypto amount | Provide either fromAmount OR toAmount only |
| reference | string | Optional | Client reference | No explicit validation |
If you know the amount you want to receive, provide it in toAmount:
| Field | Type | Required | Description | Validation / Rules |
|---|---|---|---|---|
| from.accountNumber | string | Yes | Source fiat account | Must be valid account |
| to.addressId | string | Yes | Whitelisted address ID | Must reference approved address |
| to.networkCurrencyCode | string | Yes | Asset + network (e.g. ETHEREUM_USDC) | Must be supported pair |
| amount.fromAmount | string | Leave empty | Fiat amount to convert | Provide either fromAmount OR toAmount only |
| amount.toAmount | string | Yes | Target token amount | How much tokens you want to receive |
| reference | string | Optional | Client reference | No explicit validation |
Supported network
| Environment | Network | Assets | networkCurrencyCode |
|---|---|---|---|
| Production | Ethereum | USDC, EURI | ETHEREUM_USDC ETHEREUM_EURI |
| Test | Ethereum | USDC, EURI | SEPOLIA_USDC SEPOLIA_EURI |
Example
Create a payout using fromAmount
fromAmount{
"from": {
"accountNumber": "1000000001"
},
"to": {
"addressId": "addrto_evm_01hzxjkhq4m2wtqv43w8v9n8ck",
"networkAssetCode": "ETHEREUM_USDC"
},
"amount": {
"fromAmount": "1000.00"
},
"reference": "INV-2026-00042"
}Response
{
"id": "txn_01hx2zq3k4m5n6p7q8r9",
"status": "Submitted",
"createdAt": "2026-04-29T09:00:00+00:00",
"updatedAt": "2026-04-29T09:00:00+00:00",
"from": {
"accountNumber": "f4ebf3f5-60ef-4d90-8c91-4f0f18f6f7b0"
},
"to": {
"addressId": "addrto_01hzxjkhq4m2wtqv43w8v9n8ck",
"networkCurrencyCode": "ETHEREUM_USDC"
},
"fromAmount": "1000.00",
"toAmount": "997.50",
"fxQuote": {
"quoteId": "quote_20260429_0001",
"rate": "0.9975",
"expiresAt": "2026-04-29T09:05:00+00:00"
},
"fees": [
{
"type": "network",
"value": "2.50",
"currency": "EUR"
}
],
"reference": "INV-2026-00042",
"blockchainDetails": {
"transactionHash": "0x9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"transferStatus": "pending"
},
"fiatPaymentDetails": {
"paymentId": "6f9619ff-8b86-d011-b42d-00cf4fc964ff",
"status": "pending"
}
}Transaction Lifecycle
| Status | Type | Description | Funding / Usage Rules |
|---|---|---|---|
| CREATED | Intermediate | Request is received by BC BC performs pre-transaction checks | No funds are moved at this stage |
| SUBMITTED | Intermediate | Request is in progress Status updates after fiat is successfully deducted | Fiat has been deducted Processing is ongoing |
| SETTLED | Final | Request is successful Stablecoin is sent to whitelisted address | Stablecoin transferred to destination address |
| FAILED | Final | Request has failed | No funds transferred Client should investigate |
| MISSING FUNDING | Intermediate | Request is on hold due to insufficient fiat balance | The payout is on hold for up to 2 business days to allow the client to complete the required top-up. |
| ONHOLD | Intermediate | The transaction is on hold due to additional internal processing. No client action is required. | The transaction will automatically resume or update once processing is finished. |
flowchart LR A["🟢 Created"]:::state --> B["📨 Submitted"]:::state B --> C["✅ Settled"]:::done B -->|↘ Missing Funding| D["⏳ Missing Funding"]:::missingFunding B -->|↘ On-hold| E["🟠 On-hold"]:::hold D --> C D -->|↘ On-hold| E E -->|Resolved| C A -->|↘ Failed| F["❌ Failed"]:::fail B -->|↘ Failed| F D -->|↘ Failed| F E -->|↘ Failed| F classDef state fill:#C7E5DE,stroke:#5FA8A0,color:#1F3C3A,stroke-width:2px; classDef done fill:#DFF3EE,stroke:#2F7F77,color:#0F2F2D,stroke-width:2px; classDef missingFunding fill:#FFF6D6,stroke:#C9A227,color:#4A3B00,stroke-width:2px; classDef hold fill:#FFE9D6,stroke:#D07A2D,color:#4A2A00,stroke-width:2px; classDef fail fill:#FFE8E8,stroke:#D66B6B,color:#5B1B1B,stroke-width:2px;
Retrieve Payouts
Endpoint
https://www.bankingcircleconnect.com/api/v1/digital-assets/payouts
PurposeRetrieves a paginated list of payouts.
UsageUse this endpoint to track outbound transactions from fiat to digital assets. The results are returned using cursor-based pagination for efficient navigation through large datasets.
Endpoint
https://www.bankingcircleconnect.com/api/v1/digital-assets/payouts/{id}
PurposeRetrieves the details of a specific payout.
UsageUse this endpoint to view the latest information for a payout using its unique identifier.
Coming Soon
WebhookWebhooks provide real-time updates for:
- Transactions
- Profiles
Sandbox TestingA dedicated sandbox environment will be available soon, giving you a safe space to explore the API, test your integration, and simulate payout flows without impacting real funds.
Updated 5 minutes ago
