BVNK Stablecoin Payments — a Mastercard Company
BVNK is enterprise stablecoin payment infrastructure: one API to accept stablecoins from customers, hold balances across fiat and digital currencies, and pay out to any wallet — with BVNK handling quotes, conversion, blockchain monitoring and gas. On August 3, 2026 Mastercard completed its acquisition of BVNK (up to $1.8B), becoming the first major card network to own stablecoin settlement rails. This guide covers the architecture, pay-in and payout transaction flows, the status model, and what the acquisition means.
Payouts: sending stablecoins
A payout sends stablecoins from your BVNK balance to an end-user's wallet. The powerful part is the funding model: the wallet can be fiat — BVNK converts at a locked rate and broadcasts the stablecoin transfer, so a platform can run stablecoin withdrawals while only ever holding USD or EUR. Crypto-to-crypto (including cross-stablecoin conversion) is equally supported.
A platform pays out stablecoins from a fiat balance with a locked quote: validate the destination address, create the payout with twoStep=true to freeze the rate, then confirm within the quote window to execute — BVNK handles conversion, gas, and broadcast.
PUT /api/v1/pay/validate
Destination address, network, and required tags are validated first.
Validation catches malformed addresses and missing metadata before money moves — e.g. XRP payouts to exchanges require a tag for correct crediting. An invalid instruction fails fast with an invalidPayout error instead of burning a quote.
Four integration shapes
| Method | Calls | Use when |
|---|---|---|
| Fast API payout | POST /pay/summary (type OUT) | You know the destination address and want a one-shot payout at the current rate. |
| Estimate → accept | POST /pay/estimate → PUT …/update → POST …/accept → confirm | You want to display rates, fees and network costs (30-second refresh) before creating anything. |
| Two-step payout | POST /pay/summary (twoStep: true) → PUT /pay/{uuid}/confirm/summary | A human must approve against a locked quote — e.g. "accept your 1,000 USDT salary" — within the one-hour quote window. |
| Hosted / custom page | POST /pay/summary → redirect, or update/validate/accept API sequence | You don't know the destination address — the customer enters it on the BVNK-hosted page (validated inline) or in your own UI. |
Payout status model
| Status | Final? | Meaning |
|---|---|---|
PENDING | No | Created; waiting for destination address and/or confirmation. |
PROCESSING | No | Confirmed; conversion executed, transfer heading on-chain. |
COMPLETE | Yes | Transaction registered on-chain with a hash. Irreversible. |
CANCELLED | Yes | Cancelled or failed — funds remain in the merchant wallet. |
EXPIRED | Yes | Quote or payment window lapsed before completion. |
Guard rails worth copying
The API bakes in several protections payment engineers will recognise from card rails — and a few that are chain-specific: address validation before quoting (PUT /pay/validate, incl. required XRP tags), unique references (duplicate reference → error, an idempotency key by another name), insufficient-funds pre-checks (MER-PAY-2012 before anything moves), and the confirm gate — because once broadcast, an on-chain payout has no reversal, no chargeback, no recall.
Compliance rides with every payout: complianceDetails carries requester IP and BENEFICIARY party details (individual or company) for Travel Rule obligations — the stablecoin equivalent of the data that moves in ISO 8583 DE 43/48 and ISO 20022 party blocks.