- Stablecoin withdrawals to an external wallet address —
POST /payments/withdraw/address. USDT and USDC on Ethereum, Tron, BSC, Solana, and TON (TON is USDT-only). Debited from your USD balance. - Bank withdrawals to an NGN or GHS bank account —
POST /payments/withdraw/bank/{id}. Debited from your local-currency balance.
Withdrawal states
| State | What it means |
|---|---|
pending | Request accepted, your USD balance debited in full, queued for processing. Not yet on-chain. |
completed | Broadcast succeeded and confirmed on-chain. txHash is populated. Balance stays debited. |
reversed | Broadcast was attempted but was unsuccessful. Balance refunded in full. |
rejected | Failed an internal check before broadcast. Not sent on-chain. Balance refunded in full. |
withdrawal.pending, withdrawal.completed, withdrawal.reversed, or withdrawal.rejected.
Withdrawal assets (mainnet)
Withdrawals to external crypto addresses only support stablecoins (USDT and USDC).| Network | USDT | USDC |
|---|---|---|
| Ethereum (ERC20) | Yes | Yes |
| Tron (TRC20) | Yes | Yes |
| BNB Smart Chain (BSC) | Yes | Yes |
| Solana | Yes | Yes |
| TON | Yes | No |
Before you can withdraw
| Requirement | Detail |
|---|---|
| Active credentials | Valid x-app-id / x-app-secret, integration in active state. |
| Funded USD wallet | Balance ≥ amount + fee. Both are debited together at request time. |
| PIN set | The pin field is required in the request body. Set or rotate it from the dashboard. |
| Account in good standing | Suspended or frozen accounts are blocked. |
| IP allowlist (optional) | If configured on your integration, the request must come from an allowed IP. |
Happy path
You submit the request
Call
Breet responds synchronously with the withdrawal
POST /payments/withdraw/address:| Field | Notes |
|---|---|
amount | USD value, up to 2 decimal places. Subject to your integration’s min/max. |
token | USDT or USDC. |
network | ERC20, TRC20, BSC, SOL, or TON (TON supports USDT only). |
walletAddress | Valid address for the network. Cannot be a Breet-managed address. |
pin | Required even for server-to-server calls. |
externalId | Optional. Your reference, useful for matching webhooks. |
id.Breet validates and debits
Synchronous checks, in order:
- Credentials and integration active.
- IP in allowlist (if configured).
- PIN is correct. Repeated wrong PINs can temporarily freeze the account.
amountwithin min/max.- Address is valid for the network and not a Breet-managed address.
- Not a duplicate request (see Idempotency below).
- Balance ≥
amount + fee.
amount + fee is debited, withdrawal is created with status: pending, withdrawal.pending webhook is queued.Any fail → no record, no debit, no webhook. You receive an HTTP error. See Error handling.Breet approves and broadcasts
Approval is mostly automatic. The transaction is signed and broadcast on the chosen network. The recipient receives the full
amount on-chain — the fee is charged separately (see Fees).Withdrawals flagged for internal review may stay in pending until Breet approves (typically within a few minutes).Webhook sequence, by scenario
| Scenario | Events (same id) |
|---|---|
| Clean withdrawal | withdrawal.pending → withdrawal.completed |
| Blocked pre-broadcast | withdrawal.pending → withdrawal.rejected (refunded) |
| Broadcast failed | withdrawal.pending → withdrawal.reversed (refunded) |
Fees and minimums
Breet charges a small flat fee per crypto to cover the network fee. The fee is shown on the webhook payload asfee.
The fee is charged on top of the amount you request. Your balance must cover both, and both are debited at request time. The recipient receives the full amount on-chain.
Example. You call with amount: 100, USDT on Tron, fee $1. Your balance is debited $101 (amount + fee). The recipient receives the full $100 of USDT on Tron.
Fetching withdrawals via the API
| Purpose | Endpoint |
|---|---|
| List withdrawals | GET /payments/withdrawals |
| Fetch one by ID | GET /payments/withdrawal/{id} |
FAQ
Can I withdraw BTC, ETH, SOL, or other native coins?
Can I withdraw BTC, ETH, SOL, or other native coins?
No. The Partners API supports only stablecoin withdrawals (USDT, USDC) on the networks listed above. To move native coins, sell them via a deposit first, then withdraw as a stablecoin.
Can I cancel a pending withdrawal?
Can I cancel a pending withdrawal?
Not via API. Contact support immediately after submitting if it’s critical. Once approved and broadcast, the withdrawal can only complete or reverse.
What if I send to the wrong address?
What if I send to the wrong address?
On-chain transactions are irreversible. Breet validates address format, not ownership. Always confirm the destination with your end-user before submitting.
How quickly do withdrawals complete?
How quickly do withdrawals complete?
Seconds/Minutes on Solana, Tron, and TON. Longer on EVM chains due to confirmation times.
Why do I need a PIN for an API call?
Why do I need a PIN for an API call?
It’s an additional verification layer in case your API keys leak. Store the PIN alongside your secrets and rotate it from the dashboard if exposed.
Next steps
- Set up webhook handling → Webhooks
- See supported withdrawal networks and tokens → Supported assets
- Handle 429s correctly → Rate limiting
- Simulate a withdrawal on testnet → Testing