[{"data":1,"prerenderedAt":880},["ShallowReactive",2],{"content-\u002Fresources\u002Fmore\u002Fhow-stablecoin-payouts-work-step-by-step":3,"resources-category-how-stablecoin-payouts-work-step-by-step":865},{"title":4,"seoTitle":5,"description":6,"date":7,"updated":7,"category":8,"faq":9,"howto":28,"body":49},"How stablecoin payouts work, step by step: from quote to bank deposit (2026)","How Stablecoin Payouts Work: Quote to Bank Deposit","How a stablecoin payout runs from bank account setup and quote to conversion, local-rail delivery and webhook, with quote fields, fees and failure paths.","2026-10-17","payments",[10,13,16,19,22,25],{"q":11,"a":12},"How long is a payout quote valid?","A payout quote is valid for 5 minutes by default, and the window can be shorter for SEPA and Faster Payments because the underlying rail's own deadline can be tighter. Do not hard-code a window. Read expires_at on the response, which is in epoch milliseconds, and request a new quote if you miss it.",{"q":14,"a":15},"Who pays the fees on a stablecoin payout?","The sender decides with cover_fees. When it is false, fees come out of the fiat the recipient receives, which is the common case. When it is true, fees are added on top of the stablecoin amount sent, so the recipient receives the full quoted amount. Payroll usually sets it to true so everyone receives an exact figure.",{"q":17,"a":18},"Can a stablecoin payout be cancelled?","After you execute a payout, treat it as committed. BlindPay docs describe no customer-side cancel step, only terminal statuses: completed, failed and refunded. Before you execute, simply let the quote expire. If a payout looks stuck in review, contact support@blindpay.com instead of assuming it resolves on its own.",{"q":20,"a":21},"What if the quote expires before I execute?","The payout cannot run against an expired quote. Create a new quote, which locks a fresh rate and fee breakdown, and show the updated amount to your customer if it changed. Quotes are cheap to request, so build the flow to re-quote automatically instead of failing the user's request.",{"q":23,"a":24},"What are the payout statuses?","A payout starts in processing and can move to on_hold for review. All SWIFT payouts start on hold, and ACH, wire and RTP pass through it. Terminal statuses are completed, when the fiat landed in the recipient's bank account, failed, and refunded, when stablecoins went back to the funding source.",{"q":26,"a":27},"Do I need to poll or can I use webhooks?","Use webhooks as the main signal. BlindPay sends payout.new when a payout is created, payout.update on each status change, payout.complete when it reaches completed, failed or refunded, and payout.partnerFee when a partner fee is owed. The tracking fields on the payout response give detail you can poll when needed.",{"name":29,"steps":30},"Run a stablecoin payout from quote to bank deposit",[31,34,37,40,43,46],{"name":32,"text":33},"Onboard the customer and add the recipient bank account","Make sure the paying customer has passed KYC, then add the recipient's bank account once for the destination rail. Wait for the account to reach approved status.",{"name":35,"text":36},"Create a payout quote","Request a quote with the bank account, the amount, the network and token, and cover_fees. The quote locks the rate and fees for 5 minutes by default. Read expires_at, which is in epoch milliseconds.",{"name":38,"text":39},"Authorize the funding wallet","Pass the managed wallet address, or authorize the transfer on-chain from a customer-controlled wallet, for exactly the quoted amount.",{"name":41,"text":42},"Execute the payout","Create the payout with the quote_id before the quote expires. The payout starts in processing and BlindPay pulls the stablecoins.",{"name":44,"text":45},"Convert and deliver over the local rail","BlindPay converts the stablecoins and sends local currency to the recipient's bank over the rail, such as Pix, SPEI, ACH, SEPA or SWIFT. Some rails pass through on_hold for compliance review.",{"name":47,"text":48},"Confirm by webhook","Listen for payout.update and payout.complete. Treat completed as final, and handle failed and refunded as terminal outcomes with their own follow-up.",{"type":50,"value":51,"toc":852},"minimark",[52,56,70,76,126,131,134,223,238,242,245,362,378,389,393,396,449,462,479,483,486,590,610,614,617,675,712,716,719,722,725,750,756,760,763,772,780,784,800,830,834],[53,54,55],"p",{},"A stablecoin payout runs in six stages: the recipient's bank account is set up, you request a quote, the funding wallet authorizes the amount, you execute, the provider converts and delivers local currency over a bank rail, and a webhook confirms the result. The quote is the pricing step. Everything after it follows the locked numbers.",[53,57,58,59,64,65,69],{},"This guide is the rail-agnostic engineering view as of October 2026. For the overview, start with ",[60,61,63],"a",{"href":62},"\u002Fresources\u002Fmore\u002Fwhat-is-a-stablecoin-payouts-api","what a stablecoin payouts API is",". For the Pix specifics, see the ",[60,66,68],{"href":67},"\u002Fresources\u002Fusdc-pix-quote-to-settlement","USDC to Pix quote-to-settlement guide",". BlindPay publishes this page and describes its own API.",[53,71,72],{},[73,74,75],"strong",{},"Key takeaways",[77,78,79,83,90,100,112],"ul",{},[80,81,82],"li",{},"Every BlindPay payout follows the same pattern on every rail: add a bank account once, create a quote that locks rate and fees for 5 minutes, then execute.",[80,84,85,89],{},[86,87,88],"code",{},"expires_at"," on a quote is in epoch milliseconds, and some rails return a shorter window than 5 minutes.",[80,91,92,95,96,99],{},[86,93,94],{},"cover_fees: false"," takes fees out of the fiat the recipient gets; ",[86,97,98],{},"cover_fees: true"," adds them on top so the recipient gets the full amount.",[80,101,102,103,106,107,111],{},"A ",[86,104,105],{},"failed"," payout, or one that sits past review, is not refunded automatically. Contact ",[60,108,110],{"href":109},"mailto:support@blindpay.com","support@blindpay.com",".",[80,113,114,115,118,119,121,122,125],{},"On development instances, a ",[86,116,117],{},"request_amount"," of 66600 forces ",[86,120,105],{}," and 77700 forces ",[86,123,124],{},"refunded",", so you can test failure paths for free.",[127,128,130],"h2",{"id":129},"what-are-the-steps-of-a-stablecoin-payout","What are the steps of a stablecoin payout?",[53,132,133],{},"Six steps, each with a clear owner. The business drives the first four, BlindPay runs the fifth, and webhooks close the loop.",[135,136,137,154,177,187,200,209],"ol",{},[80,138,139,142,143,146,147,150,151,111],{},[73,140,141],{},"Set up the recipient (you)."," The paying customer has passed KYC, and the recipient's bank account is added once for the destination rail and reaches ",[86,144,145],{},"approved",". Third-party recipients are allowed: set ",[86,148,149],{},"recipient_relationship"," to anything other than ",[86,152,153],{},"first_party",[80,155,156,159,160,162,163,162,166,162,169,172,173,176],{},[73,157,158],{},"Create the quote (you, then BlindPay)."," You request a payout quote with the bank account, ",[86,161,117],{},", ",[86,164,165],{},"currency_type",[86,167,168],{},"cover_fees",[86,170,171],{},"network"," and ",[86,174,175],{},"token",". BlindPay returns the locked rate, the fee breakdown and an expiry.",[80,178,179,182,183,186],{},[73,180,181],{},"Authorize funding (you)."," A BlindPay-managed wallet needs no signature: pass its address as ",[86,184,185],{},"sender_wallet_address",". A customer-controlled wallet must authorize exactly the quoted amount on-chain first, with an EVM approve, a Stellar signature or a Solana delegation.",[80,188,189,192,193,196,197,111],{},[73,190,191],{},"Execute (you)."," You create the payout with the ",[86,194,195],{},"quote_id",". It starts in ",[86,198,199],{},"processing",[80,201,202,205,206,111],{},[73,203,204],{},"Convert and deliver (BlindPay)."," BlindPay pulls the stablecoins, converts them and sends local currency over the rail. Compliance review can pause some rails in ",[86,207,208],{},"on_hold",[80,210,211,214,215,218,219,222],{},[73,212,213],{},"Confirm (webhook)."," ",[86,216,217],{},"payout.update"," marks each status change and ",[86,220,221],{},"payout.complete"," marks the end state.",[53,224,225,226,229,230,233,234,111],{},"Amounts are integers in minor units, never floats. To send 100.00, pass ",[86,227,228],{},"10000",". Use an ",[86,231,232],{},"Idempotency-Key"," header on the create calls so a retry after a timeout cannot create two payouts. The behavior is documented in the ",[60,235,237],{"href":236},"\u002Fdocs\u002Flearn\u002Fidempotency","idempotency docs",[127,239,241],{"id":240},"what-do-the-quote-fields-mean","What do the quote fields mean?",[53,243,244],{},"The quote tells you what leaves the funding source, what lands in the bank and how the difference breaks down. Show these numbers to your customer before you execute.",[246,247,248,261],"table",{},[249,250,251],"thead",{},[252,253,254,258],"tr",{},[255,256,257],"th",{},"Field",[255,259,260],{},"Meaning",[262,263,264,279,288,298,308,318,332,342,352],"tbody",{},[252,265,266,272],{},[267,268,269],"td",{},[86,270,271],{},"id",[267,273,274,275,278],{},"The quote ID (",[86,276,277],{},"qu_...",") you pass when you execute.",[252,280,281,285],{},[267,282,283],{},[86,284,88],{},[267,286,287],{},"Expiry in epoch milliseconds.",[252,289,290,295],{},[267,291,292],{},[86,293,294],{},"sender_amount",[267,296,297],{},"The stablecoin amount the funding source sends, in minor units.",[252,299,300,305],{},[267,301,302],{},[86,303,304],{},"receiver_amount",[267,306,307],{},"The fiat amount the bank account receives, in minor units.",[252,309,310,315],{},[267,311,312],{},[86,313,314],{},"flat_fee",[267,316,317],{},"The flat-fee component.",[252,319,320,325],{},[267,321,322],{},[86,323,324],{},"partner_fee_amount",[267,326,327,328,331],{},"Nonzero only if you passed a ",[86,329,330],{},"partner_fee_id",", which is how you add your own fee.",[252,333,334,339],{},[267,335,336],{},[86,337,338],{},"billing_fee_amount",[267,340,341],{},"Nullable. Nonzero only on instances with billing charges enabled.",[252,343,344,349],{},[267,345,346],{},[86,347,348],{},"commercial_quotation",[267,350,351],{},"The raw market exchange rate.",[252,353,354,359],{},[267,355,356],{},[86,357,358],{},"blindpay_quotation",[267,360,361],{},"The rate net of BlindPay's fee.",[53,363,364,366,367,369,370,373,374,377],{},[86,365,165],{}," decides which side ",[86,368,117],{}," describes. With ",[86,371,372],{},"sender",", you name the stablecoin amount. With ",[86,375,376],{},"receiver",", you name the fiat the recipient should get. Payin quotes use the same field name with the opposite meaning, so check which quote type you are building.",[53,379,380,381,384,385,111],{},"The minimums apply at quote time. SWIFT needs a 100 USD requested amount before fees, SEPA needs 50 USDC by sender or 40 EUR by receiver, Faster Payments needs 70 USDC or 50 GBP, and every other rail needs 10 USD sender amount. Below that, the quote fails, for example with ",[86,382,383],{},"LIMITS_AMOUNT_OUT_OF_RANGE",". Full detail is in the ",[60,386,388],{"href":387},"\u002Fdocs\u002Fpayout-quotes","payout quotes docs",[127,390,392],{"id":391},"who-pays-the-fees-what-does-cover_fees-change","Who pays the fees: what does cover_fees change?",[53,394,395],{},"It decides whether the recipient or the sender absorbs the fees. Pick it per payout, and make it a product decision rather than a default.",[246,397,398,415],{},[249,399,400],{},[252,401,402,406,409,412],{},[255,403,404],{},[86,405,168],{},[255,407,408],{},"Fees come from",[255,410,411],{},"Recipient gets",[255,413,414],{},"Typical use",[262,416,417,433],{},[252,418,419,424,427,430],{},[267,420,421],{},[86,422,423],{},"false",[267,425,426],{},"The fiat amount the recipient would receive",[267,428,429],{},"The quoted amount minus fees",[267,431,432],{},"Marketplaces, remittances, most payouts",[252,434,435,440,443,446],{},[267,436,437],{},[86,438,439],{},"true",[267,441,442],{},"Added on top of the stablecoin amount sent",[267,444,445],{},"The full quoted amount",[267,447,448],{},"Payroll, invoices, refunds with exact amounts",[53,450,451,452,454,455,458,459,461],{},"Customer-paid fees are the common case. If your promise is \"your supplier receives exactly 2,000 BRL\", use ",[86,453,439],{}," with ",[86,456,457],{},"currency_type: \"receiver\""," and read the ",[86,460,294],{}," the quote returns. That is the amount the funding wallet must cover.",[53,463,464,465,469,470,474,475,478],{},"On pricing: BlindPay combines a monthly plan (platform access) with per-transaction fees that vary by rail and network and are disclosed only in the live quote before execute. BlindPay does not publish a static flat rate card; always cite the quote's fee breakdown rather than a fixed bps number. The ",[60,466,468],{"href":467},"\u002Fdocs\u002Flearn\u002Fbilling","billing docs"," add that there is no setup fee and no monthly minimum, and that development instances are always free. To charge your own customers on top, use ",[60,471,473],{"href":472},"\u002Fdocs\u002Flearn\u002Fpartner-fees","partner fees",". BlindPay sends a ",[86,476,477],{},"payout.partnerFee"," webhook when a partner fee is owed.",[127,480,482],{"id":481},"what-does-an-illustrative-usdc-to-brl-pix-payout-timeline-look-like","What does an illustrative USDC to BRL Pix payout timeline look like?",[53,484,485],{},"Below is an illustrative sequence for a USDC payout to a Pix key, not a service-level promise. Use it to design your UI states.",[246,487,488,501],{},[249,489,490],{},[252,491,492,495,498],{},[255,493,494],{},"Stage",[255,496,497],{},"What happens",[255,499,500],{},"What your system sees",[262,502,503,520,540,560,579],{},[252,504,505,508,511],{},[267,506,507],{},"Minute 0",[267,509,510],{},"You request a quote for a USDC amount to an approved Pix bank account.",[267,512,513,514,516,517,519],{},"A quote with ",[86,515,304],{}," in BRL and ",[86,518,88],{}," about 5 minutes ahead.",[252,521,522,525,530],{},[267,523,524],{},"Within the 5-minute window",[267,526,527,528,111],{},"Your customer confirms the shown BRL amount and your app executes with the ",[86,529,195],{},[267,531,532,533,535,536,539],{},"A payout in ",[86,534,199],{}," and a ",[86,537,538],{},"payout.new"," webhook.",[252,541,542,545,548],{},[267,543,544],{},"Seconds to minutes later",[267,546,547],{},"BlindPay collects the stablecoins and converts them to BRL.",[267,549,550,162,553,172,556,559],{},[86,551,552],{},"tracking_transaction",[86,554,555],{},"tracking_payment",[86,557,558],{},"tracking_liquidity"," objects move through their steps.",[252,561,562,565,568],{},[267,563,564],{},"On delivery",[267,566,567],{},"BlindPay sends the reais over Pix, which Banco Central do Brasil runs every hour of the year.",[267,569,570,572,573,575,576,111],{},[86,571,217],{},", then ",[86,574,221],{}," with status ",[86,577,578],{},"completed",[252,580,581,584,587],{},[267,582,583],{},"After the webhook",[267,585,586],{},"The recipient sees the credit in their bank app.",[267,588,589],{},"Your app marks the order paid and posts to the ledger.",[53,591,592,593,599,600,605,606,111],{},"Per BlindPay docs, Pix payouts are instant, so the long pole is your own approval and funding, not the rail. The ",[60,594,598],{"href":595,"rel":596},"https:\u002F\u002Fwww.bcb.gov.br\u002Fen\u002Ffinancialstability\u002Fpix_en",[597],"nofollow","Banco Central do Brasil Pix page"," describes the rail. The same sequence on a Mexican SPEI payout is just as fast: ",[60,601,604],{"href":602,"rel":603},"https:\u002F\u002Fwww.banxico.org.mx\u002Fservices\u002Finterbanking-electronic-payme.html",[597],"Banco de México"," says a SPEI payment should take no more than 30 seconds after approval. A TED payout to Brazil, by contrast, takes about 1 business day and follows the banking-day cut-off in the ",[60,607,609],{"href":608},"\u002Fdocs\u002Fkb\u002Fcut-off-times","cut-off times reference",[127,611,613],{"id":612},"how-do-payout-statuses-and-webhooks-fit-together","How do payout statuses and webhooks fit together?",[53,615,616],{},"Status is the top-level answer, the tracking objects are the detail, and webhooks are the delivery mechanism.",[246,618,619,628],{},[249,620,621],{},[252,622,623,626],{},[255,624,625],{},"Status",[255,627,260],{},[262,629,630,639,648,657,666],{},[252,631,632,636],{},[267,633,634],{},[86,635,199],{},[267,637,638],{},"Default on creation. Stablecoins are being pulled and the fiat transfer is in flight.",[252,640,641,645],{},[267,642,643],{},[86,644,208],{},[267,646,647],{},"Held for review. All SWIFT payouts start here. ACH, wire and RTP pass through it as a standard compliance step.",[252,649,650,654],{},[267,651,652],{},[86,653,578],{},[267,655,656],{},"The fiat landed in the recipient's bank account. Terminal.",[252,658,659,663],{},[267,660,661],{},[86,662,105],{},[267,664,665],{},"The payout did not complete, for example after a review timeout or a rejected compliance check. Terminal.",[252,667,668,672],{},[267,669,670],{},[86,671,124],{},[267,673,674],{},"The stablecoins went back to the funding source instead of becoming fiat. Terminal.",[53,676,677,678,162,680,162,682,172,684,687,688,691,692,162,694,162,696,699,700,702,703,707,708,111],{},"The four sub-status objects are ",[86,679,552],{},[86,681,555],{},[86,683,558],{},[86,685,686],{},"tracking_complete",", each with a ",[86,689,690],{},"step"," such as ",[86,693,199],{},[86,695,208],{},[86,697,698],{},"pending_review"," or ",[86,701,578],{},". ",[60,704,706],{"href":705},"\u002Fresources\u002Fmore\u002Fstablecoin-payout-statuses-explained","Stablecoin payout statuses explained"," walks through them in plain language. Webhook setup and signature verification are in the ",[60,709,711],{"href":710},"\u002Fdocs\u002Flearn\u002Fwebhooks","webhooks docs",[127,713,715],{"id":714},"what-happens-when-a-payout-fails","What happens when a payout fails?",[53,717,718],{},"Stablecoins go back to the quote's refund wallet, or to the sending wallet if none is set. How fast depends on the rail and the currency.",[53,720,721],{},"BlindPay documents the custody and refund model this way: BlindPay operates as a non-custodial payment processor for payout flows from customer-controlled wallets: you authorize the exact amount and BlindPay executes that single transaction. If a payout cannot be delivered after the stablecoins are collected, BlindPay refunds them to the quote's refund wallet, or to the sending wallet when none is set; on Pix and other non-USD local rails the refund is automatic, while USD payouts and payouts whose review times out are refunded after an operator review. Optional BlindPay-managed wallets (beta) are custodial when you choose that path.",[53,723,724],{},"Three practical rules follow:",[135,726,727,736,742],{},[80,728,729,732,733,735],{},[73,730,731],{},"Pix and other non-USD rails refund automatically."," Your app should expect ",[86,734,124],{}," and release the order.",[80,737,738,741],{},[73,739,740],{},"USD payouts refund after operator review."," Do not promise an instant refund on ACH, wire or RTP.",[80,743,744,747,748,111],{},[73,745,746],{},"A stuck payout is not refunded automatically."," Holds can last up to 30 days, and a timeout fails the payout. If a payout sits in review, contact ",[60,749,110],{"href":109},[53,751,752,753,755],{},"On the fiat side, refunds depend on the banking network returning the funds and fees may apply. The ",[60,754,609],{"href":608}," lists the common causes: wrong account details, a receiving bank rejection, a closed or restricted account, and unmet compliance requirements. Test all of this on a development instance.",[127,757,759],{"id":758},"how-does-this-compare-with-circle-payments-network","How does this compare with Circle Payments Network?",[53,761,762],{},"Circle Payments Network is an institution-to-institution network. BlindPay is a single API where you quote, execute and track. The two sit at different layers.",[53,764,765,766,771],{},"Circle's ",[60,767,770],{"href":768,"rel":769},"https:\u002F\u002Fdevelopers.circle.com\u002Fcpn",[597],"CPN documentation"," describes a network that lets institutions take in, exchange, transfer and settle funds in USDC through one integration. An originating financial institution requests an FX quote, creates the payment, sends the onchain USDC transfer and tracks its status, and payout partners in the network deliver local fiat to the receiver. That model fits regulated institutions that want to join the network.",[53,773,774,775,779],{},"With BlindPay, the business does not operate the settlement layer. It calls the quote and payout endpoints and gets local currency delivered over Pix, SPEI, ACH, SEPA, Faster Payments and SWIFT (POBO\u002FCOBO), the BlindPay way of running cross-border wires as SWIFT payments and collections on behalf of, with UETR tracking and MT103 confirmations. Teams that already issue or hold USDC with Circle add BlindPay as the payout layer after issuance. See the ",[60,776,778],{"href":777},"\u002Fcompare\u002Fcircle","BlindPay and Circle comparison"," for the full picture.",[127,781,783],{"id":782},"methodology-and-sources","Methodology and sources",[53,785,786,787,162,791,172,795,799],{},"External sources: ",[60,788,790],{"href":595,"rel":789},[597],"Banco Central do Brasil on Pix",[60,792,794],{"href":602,"rel":793},[597],"Banco de México on SPEI",[60,796,798],{"href":768,"rel":797},[597],"Circle Payments Network documentation",", read in October 2026.",[53,801,802,803,162,807,162,810,162,814,162,817,162,820,162,823,172,826,829],{},"BlindPay docs: ",[60,804,806],{"href":805},"\u002Fdocs\u002Fpayouts","Payouts",[60,808,809],{"href":387},"Payout quotes",[60,811,813],{"href":812},"\u002Fdocs\u002Fbank-accounts","Bank accounts",[60,815,816],{"href":608},"Cut-off times",[60,818,819],{"href":236},"Idempotency",[60,821,822],{"href":710},"Webhooks",[60,824,825],{"href":467},"Billing",[60,827,828],{"href":472},"Partner fees",". The timeline table is illustrative and no figure in it is a guarantee. Check current rail speeds in the docs before you quote them to customers.",[127,831,833],{"id":832},"what-to-do-next","What to do next",[53,835,836,837,840,841,845,846,848,849,851],{},"Read the ",[60,838,839],{"href":805},"payouts docs",", then run the ",[60,842,844],{"href":843},"\u002Fdocs\u002Fquickstart-payout","payout quickstart"," on a free development instance. Execute one payout to completion, then force ",[86,847,105],{}," with 66600 and ",[86,850,124],{}," with 77700 so your webhook handler is proven before production.",{"title":853,"searchDepth":854,"depth":854,"links":855},"",2,[856,857,858,859,860,861,862,863,864],{"id":129,"depth":854,"text":130},{"id":240,"depth":854,"text":241},{"id":391,"depth":854,"text":392},{"id":481,"depth":854,"text":482},{"id":612,"depth":854,"text":613},{"id":714,"depth":854,"text":715},{"id":758,"depth":854,"text":759},{"id":782,"depth":854,"text":783},{"id":832,"depth":854,"text":833},[866,871,876],{"path":867,"title":868,"description":869,"date":870},"\u002Fresources\u002Fmore\u002Fstablecoin-payouts-api-integration-checklist","How to integrate a stablecoin payouts API: a developer checklist (2026)","Integrate a stablecoin payouts API: dev instance, KYC, bank account, quote, payout request, webhooks, rail minimums, go-live checklist and a 12-test plan.","2026-10-23",{"path":872,"title":873,"description":874,"date":875},"\u002Fresources\u002Fmore\u002Fhow-a-stablecoin-payin-works-step-by-step","How a stablecoin payin works step by step (ACH, wire, SWIFT, and Pix to USDC)","How does a stablecoin payin work? Follow eight steps from bank transfer to USDC in a wallet, with timing by rail, checks, webhooks, and failure cases.","2026-10-19",{"path":877,"title":878,"description":879,"date":7},"\u002Fresources\u002Fmore\u002Fbest-blockchain-payment-processors-fintech-2026","Best blockchain payment processors for fintech businesses in 2026: BlindPay, Bridge, BVNK, Circle, and Conduit compared","Five blockchain payment processors for fintechs compared by job: local payouts, stablecoin platforms, enterprise accounts, bank networks, and USD accounts.",1794399375931]