Turn USDC into pounds in a UK bank account over Faster Payments: sort code details, quotes in USDC or GBP, quote windows, timing, and a worked example.
To off-ramp USDC to GBP, add the recipient's UK bank account (6-digit sort code, 8-digit account number), request a payout quote in USDC or in pounds, and execute it before the quote expires. The USDC converts to GBP and is paid out over Faster Payments, the UK's real-time bank rail. BlindPay estimates about 1 business day end to end.
This is the UK version of the USDC to euros over SEPA guide. Same quote-then-execute pattern, different bank details, and one quirk in the quote window worth knowing before you build the screen.
Key takeaways
currency_type: sender) or in pounds (currency_type: receiver) to fix the amount that lands.expires_at, never hardcode it.Faster Payments is the UK's real-time interbank payment system, run by Pay.UK. Pay.UK says it has operated since 2008, is "available day and night, 365 days per year", and supports real-time payments of up to £1 million, with individual banks setting their own lower limits (Pay.UK).
It is also enormous. In 2025 it processed 5.55 billion transactions worth £4.84 trillion, per the same page. For a business paying UK contractors, suppliers, or customers, it is the default rail for pounds.
Faster Payments sits next to Pix, SPEI, and RTP in the family of instant domestic rails. Instant payment systems by country compares their hours and limits.
You need a customer that has passed KYC and a bank account of type faster_payments for the recipient. The required fields, from BlindPay's bank accounts docs:
| Field | Format | Notes |
|---|---|---|
name | Text | Your display name for the account |
account_class | individual or business | Both beneficiary types are supported |
faster_payments_sort_code | 6 digits | Dashes and spaces are stripped |
faster_payments_account_number | 8 digits | UK account number |
faster_payments_beneficiary_legal_name | Text | The account holder's legal name |
faster_payments_beneficiary_address_line_1 | Text | Beneficiary address |
faster_payments_beneficiary_city | Text | Beneficiary city |
faster_payments_beneficiary_country | GB | Country code |
Address line 2, state or region, and postal code are optional. The account can belong to someone other than your customer: set recipient_relationship to a value other than first_party, for example vendor_or_supplier or independent_contractor.
Get the legal name exactly right. UK banks run Confirmation of Payee, an account name check that Pay.UK says completes more than 2 million checks a day (Pay.UK). The stakes are on the bank side too: since 7 October 2024, UK providers must reimburse in-scope APP scam victims on Faster Payments up to £85,000 per claim (Payment Systems Regulator), so name checks are taken seriously. Verification of payee for instant payments covers how those checks work.
Five steps, the same shape as every BlindPay payout.
POST /v1/instances/{instance_id}/customers/{customer_id}/bank-accounts with type: "faster_payments" and the fields above. Save the ba_... id.POST /v1/instances/{instance_id}/quotes with bank_account_id, token: "USDC", the network you fund from, cover_fees, currency_type, and request_amount in minor units (payout quotes).receiver_amount, the fee lines, and a timer counting down to expires_at (epoch milliseconds).approve on the token contract with the contract payload from the quote, then POST /v1/instances/{instance_id}/payouts/evm with quote_id and sender_wallet_address. A managed wallet skips the approval.payout.new fires when the payout is created and the funds are captured, payout.update on intermediate steps, and payout.complete when it is confirmed at the destination or refunded (webhook events).There is also a no-quote path. An offramp wallet is a deposit address linked to the UK bank account: any USDC sent to it converts and pays out automatically. For Faster Payments accounts it accepts deposits on Ethereum, Base, Arbitrum, Polygon, and Solana. What an off-ramp wallet is covers when that beats a quote.
Yes. Set currency_type to receiver and pass the pound amount in pence. The quote works backwards and tells you how much USDC to send. Paying an exact local amount with receiver-side quotes goes deeper on when to fix which side.
Illustrative example. A UK contractor invoices £2,500.00 and must receive exactly that.
| Line | Value |
|---|---|
request_amount | 250000 (£2,500.00 in pence) |
commercial_quotation (market rate) | 0.7450 GBP per USDC |
blindpay_quotation (rate after BlindPay's margin) | 0.7413 GBP per USDC |
| FX margin | (0.7450 - 0.7413) / 0.7450 = 0.50% |
| USDC needed at the quoted rate | 2,500 / 0.7413 = 3,372.46 USDC |
Flat fee, paid by the sender (cover_fees: true) | 2.00 USDC |
sender_amount | 3,374.46 USDC |
receiver_amount | £2,500.00 |
At the pure market rate the same £2,500 would cost 2,500 / 0.7450 = 3,355.70 USDC. The 18.76 USDC difference is the full cost of this payout: 16.76 in the rate plus the 2.00 flat fee, about 0.56% all in. Cost per delivered dollar shows how to compare that number across providers.
The quote does this math for you. Read sender_amount from the response instead of computing it yourself, because fee rounding and minimums are applied server side.
Faster Payments payouts also carry a minimum per payout, set on the USDC side when you quote by sender amount and on the pound side when you quote by receiver amount. Below it, the quote fails with an error naming the side you missed. Current figures are in the payouts docs.
GBP payouts are funded in USDC. The quote is priced for the network you send from, and BlindPay's supported chains reference lists where USDC is deployed.
The detail that surprises people: the crypto leg of a Faster Payments payout always runs on Polygon, regardless of the network you funded from (payment methods). That changes nothing in your API call. It can change the on-chain timing you see between funding and the bank send.
If you use an offramp wallet instead of quotes, pick one of the five deposit networks above. Which network to use to off-ramp stablecoins compares finality and fees by chain.
BlindPay's documented estimate is about 1 business day for Faster Payments, and high transaction volumes can affect that estimate (bank accounts docs). The Faster Payments rail itself is real-time. The estimate covers the whole payout through BlindPay's banking partner network, not just the final bank credit.
| Stage | What happens | Timing |
|---|---|---|
| Quote | Rate and fees locked | Up to 5 minutes, often shorter on this rail |
| Execute | USDC pulled from the funding wallet | One on-chain confirmation |
| Conversion and bank send | USDC to GBP, paid over Faster Payments | Part of the ~1 business day estimate |
| Credit | Pounds land in the UK account | Status moves to completed |
Promise your users "about 1 business day", then update them from webhooks. How to track an off-ramp payout has a status-to-message map you can reuse.
Because the rail's own deadline can be tighter than BlindPay's default. Every BlindPay quote defaults to 5 minutes, and the cut-off times reference notes that SEPA and Faster Payments payout quotes may be shorter.
In practice that means three rules for your code:
expires_at from the response. It is epoch milliseconds, not seconds.Handling expired quotes in TypeScript and Python has the full retry loop, and who carries FX risk in a stablecoin payout explains why short windows exist at all.
Every cost is in the quote before you execute. commercial_quotation next to blindpay_quotation shows the FX margin, flat_fee shows the fixed part, and partner_fee_amount shows any markup your platform adds (partner fees on live quotes).
BlindPay combines a monthly plan with per-transaction fees that vary by rail and network and are disclosed in the live quote before execute. There is no static rate card. Owners and admins can read the Faster Payments fee object for their instance from GET /v1/instances/{instance_id}/billing/fees (billing). Plans are on the pricing page.
To judge whether the price is good, the on/off-ramp liquidity scorecard and the liquidity glossary give you the terms and the tests.
Create a faster_payments bank account on a development instance, request one receiver-side quote for £2,500, and check how expires_at compares with the 5-minute default. The bank accounts docs have the exact request body.
Seven places blockchain payments beat bank rails: contractor payroll, remittances, B2B suppliers, marketplaces, 24/7 treasury, bill pay, and PSP payouts.
AP2, ACP, and x402 each verify that an AI agent had permission to spend. Here is what every protocol covers, who backs it, and the reconciliation gap none of them close.
The three roles behind every card program, stablecoin cards included: what each one does, who carries liability, and what to ask a provider.