How To: Implement Merchant Payouts (From Coinflow Wallet)
Developers can use this documentation to implement merchant payouts (from Coinflow’s in-app wallet) to an end-user’s bank account / debit card.
Merchant (Coinflow In-App Wallet) Payout Guide
Overview
This guide enables merchants to send fiat payouts to end-users’ bank accounts using Coinflow’s in-app wallet as the source of funds. All payouts are processed via API integration.
Prerequisites
Register for a sandbox merchant account and create API keys
Configure and fund your in-app Coinflow wallet
Review the merchant payout flow before implementation
Coinflow does not provide a pre-built UI for merchant payouts - API integration required
Important Implementation Note
This flow is similar to the Merchant (BYO) Wallet Payout flow except for the endpoint used to initiate payouts. Make sure to understand your flow of funds before proceeding.
Flow of Funds
Account Setup
Before you begin implementing, complete these required setup steps:
Required Before Integration
You MUST complete the account setup section before you start integrating!
Step 1: Register Sandbox Account
Register a sandbox merchant account or Login to your sandbox merchant account
Step 5: Add Funds
Add funds to your in-app Coinflow wallet. Reach out to Coinflow team for the public key.
Developer Resources
Quick Links:
- Webhook Reference - Listen to withdraw webhooks
- Sandbox Test Credentials - Use for testing card numbers and bank account numbers
Required Authorization Headers:
Authorization- Your API Key from the merchant dashboardx-coinflow-auth-user-id- A unique customer ID you use within your systems to identify the user withdrawing fundsx-coinflow-auth-blockchain- Should always besolana
Implementation Guide
Step 1: KYC/KYB Verification for Withdrawers
To complete a payout/withdraw, every Withdrawer must complete verification before they can proceed with a payout through Coinflow. Withdrawers only need to KYC the first time they withdraw and do not need to KYC again for any subsequent withdrawals.
Rate Limit Notice
Failed KYC attempts are limited to 3 per minute.
Choose your KYC implementation method:
1. I want to use Coinflow for KYC
Merchants who want to use Coinflow for KYC should call Register User.
U.S. Withdrawers
Endpoint: POST /api/withdraw/kyc
Non-U.S. Withdrawers
Endpoint: POST /api/withdraw/kyc
2. I am using my own KYC provider and I want to pass KYC data to Coinflow
Merchants who want to pass KYC data from their existing KYC provider can call our Register User via Document endpoint.
4. I have my own KYC provider and will complete KYC reliance process with Coinflow
Merchants must receive approval from the Coinflow Compliance team regarding approval of your KYC attestation program. Once you’ve receive approval, follow these implementation steps.
Step 2: Get Withdrawer Details
After calling our withdraw endpoints, you must call Get Withdrawer to get the latest verification status. This endpoint will tell you the user’s verification status. The get withdrawer endpoint can also be queried at any time to get more information about a withdrawer who has already completed KYC/KYB.
Endpoint: GET /api/withdraw
Step 3: Add a Payout Destination
Withdrawers must link a payout destination so we know where to send the funds.
Want to use Coinflow’s UI for KYC and Bank Authentication?
Merchants can choose to use our UI for KYC and bank authentication, saving time by avoiding the need to build these flows and add payout destinations. You’ll only need to create the UI for displaying quotes and initiating payouts.
If you choose to use our UI, you do not need to separately implement Step 3: Add A Payout Destination as the bank auth UI also handles linking payout destinations.
1. Withdrawers in the U.S.
Withdrawers in the U.S.
If withdrawers are in the U.S. and want to receive USD, they can link their debit card or bank account.
Add a debit card as a payout destination:
2. Withdrawers in the EU/UK
If withdrawers reside in the EU or UK, they can link their IBAN to receive EUR or GBP.
3. Withdrawers in Brazil
If withdrawers reside in Brazil, they can link their PIX account to receive BRL.
Step 4: Get a Quote for the Withdraw
Merchants may show an estimated quote of how much the user will receive after fees.
Token Values by Environment:
- Sandbox:
4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU - Production:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Endpoint: GET /api/withdraw/quote
Step 5: Initiate the Payout
This endpoint enables a user to submit a payout. Upon sending the request, funds from your Coinflow in-app balance will decrement, and the end-user will receive their funds in their selected payout destination.
Getting the Tokenized Account
To get the tokenized bank account or debit card, call get withdrawer and reference the token param. For example, for bank account: bankAccounts[0]['token']
Speed Options:
Pass any of the following as the speed depending on the payout method the withdrawer selects:
card- Instant debit card payoutsasap- Instant, RTP payoutsame_day- Same day ACH payoutstandard- Standard ACH payoutiban- SEPA payoutpix- PIX payout
Endpoint: POST /api/merchant/withdraws/payout/delegated
Step 6: Get In-App Wallet Balance (Optional)
Call Get Balance to get the fund balance of your in-app wallet.
Next Steps
Now that you’ve implemented merchant payouts from your Coinflow in-app wallet, here’s what to do next:
- Test your integration in sandbox
- Configure webhook notifications
- Review common payout errors and troubleshooting
- Contact Coinflow team when ready to go live
Frequently Asked Questions
What is a 451 response on the verification?
A 451 response indicates that we need additional information to verify the withdrawer.
When you receive a 451 response, you must redirect the withdrawer to the verificationLink provided in the response body (i.e., response.verificationLink). This link takes them to our provider’s verification page, where they typically need to upload a photo ID and take a selfie.
Once the withdrawer completes the verification, send a subsequent request to the get withdrawer endpoint to confirm the verification.status == approved.
What is bank authentication and why do I need to implement this?
Bank authentication verifies that a user owns the bank account they’re connecting. It’s essential for preventing fraud, ensuring regulatory compliance, reducing payment failures, and protecting against chargebacks. Per our AML policies, we require it before allowing withdrawals.
How do I get the cardToken, and why is card tokenization required?
You can obtain the cardToken by using our secure frontend components, which capture and tokenize card details. This token replaces sensitive card information and is then passed to your backend for further processing.
Tokenizing the card is essential for PCI compliance. It ensures that raw card data never touches your servers, helping keep your system out of PCI scope. As a PCI-compliant provider, we handle the sensitive data securely, significantly reducing your compliance burden.
If you do not have an AOC for PCI DSS, follow our Tokenize Debit Cards for Withdraws guide. If you do have an AOC, you may instead follow our Tokenize Card Data via API for Debit Card Payouts recipe.
How do I know if I have a valid AOC for PCI DSS?
Merchants with PCI DSS certification should be able to provide a valid Attestation of Compliance (AOC) as proof. Here is an example of an acceptable AOC for merchants.
If you’re a service provider implementing on behalf of a merchant, you must provide a valid AOC specific to service providers. This is an example of an acceptable AOC for service providers. Additionally, your AOC must be reviewed and approved by a Qualified Security Assessor (QSA).
How do I fund the Coinflow wallet balance on production?
Merchants who are ready to go live have the option to:
- Send USDC on Solana directly. (Ask Coinflow for your production wallet address).
- Wire funds. (Ask Coinflow for wiring instructions).
Is there a Pre-Built UI for my merchant payout flow?
At this time, Coinflow does not provide a UI for the merchant payout flow. Merchants have the option of using our UI for bank authentication only.

