Table of Contents
Most stablecoin offramps stop at a US bank account. Noah's payout API is built for the harder job: turning USDC into local currency in markets where the recipient expects a SEPA credit, a Fedwire, or a mobile money wallet.
The named object here is the Noah stablecoin payout: a sell transaction on Noah's Business API that converts stablecoins from your balance into fiat and pays a recipient through a runtime-selected channel. This guide walks the five API calls in order, shows a worked Fedwire example with the real numbers from Noah's sandbox docs, and ends with Stablecoin Insider's take on when Noah is the right payout rail.
Key Takeaways
- A Noah stablecoin payout is five calls: countries, channels, form, prepare, sell.
- Read channel IDs at runtime; Noah says they change and must not be cached.
- Prepare returns a fee, a crypto estimate, a ceiling, and a FormSessionID.
- Every sell needs a unique Nonce, which never expires, so retries stay safe.
- Production requires an ES384 or ES256 signed JWT in the Api-Signature header.
Facts in this guide come from Noah's public documentation as of October 5, 2026: the Global Payout product page, the Direct Payout to US Business recipe, and the Channels, Idempotence, and Transaction webhook concept pages. Noah does not publish a fixed fee schedule, so no fee in this article is a price quote.
What a Noah stablecoin payout actually is
Noah describes Global Payout as converting crypto into over 120 fiat currencies and delivering through local methods across 60+ countries, per its Global Payout page. Delivery methods listed there include bank transfers, mobile money, digital wallets, and cash pickup.
Under the hood, a payout is a sell transaction. Your business balance funds it, Noah converts the stablecoin, and the fiat leg goes out on the channel you picked. The transaction record shows Direction: Out and Network: OffNetwork for a fiat payout to a bank, according to the Transaction webhook reference.
That distinction matters. You aren't sending USDC to a wallet. You're spending USDC to buy a fiat payment.
Who should use Noah for stablecoin payouts
Noah's product page names five fits: crypto exchanges handling fiat withdrawals, remittance services, gig platforms paying contractors, marketplaces settling sellers, and gaming payouts. All five share one trait: recipients live in many countries and expect local rails.
Skip Noah if your recipients are mostly US businesses on ACH and wire. A narrower offramp is simpler (see How to Off-Ramp USDC to ACH or Wire). Skip it too if recipients want stablecoins, not fiat; How to Send a Modern Treasury Stablecoin Payout and How to Send a Circle Stablecoin Payout cover wallet delivery.
Prerequisites before your first payout
Noah's payout recipe lists the setup: register interest at business@noah.com, sign up for a sandbox account, and ask Noah to upgrade it to a business account. Then generate a sandbox API key in the Business Dashboard.
- Base URLs: https://api.sandbox.noah.com/v1 for sandbox and https://api.noah.com/v1 for production, per Noah's developer index.
- Auth: every request carries an X-Api-Key header.
- Request signing: an Api-Signature JWT is mandatory in production, signed with ES384 (ES256 also accepted) and audience https://api.noah.com, per the Request Signing page.
- Sandbox assets carry a _TEST suffix, so you'll send USDC_TEST, not USDC.
- Webhooks: subscribe to the Transaction event before you send anything.
Choose a compliance model first
Noah supports two models, explained on its Compliance Overview. The choice changes how you create customers, so make it before writing code.
| Model | Who it fits | How customers get onboarded |
|---|---|---|
| Reliance | Regulated businesses that already run KYC | You share simplified KYC data via PUT /customers/{CustomerID}; Noah spot-checks full KYC packs |
| Standard | Technology providers without their own licenses | Noah runs KYC through hosted onboarding or prefill; customers still accept Noah's terms in a hosted session |
Stablecoin Insider's read: most startups land on Standard. Reliance is only open to regulated entities, and Noah says those customers must hold valid, unexpired KYC in your system every time they transact (source).
Step 1: Create or update the customer
Call PUT /customers/{CustomerID} with your own CustomerID. For a business recipient, Noah's recipe sends Type Business, RegisteredName, RegistrationNumber, RegistrationCountry, RegisteredAddress, and IncorporationDate.
PUT https://api.sandbox.noah.com/v1/customers/acme-contractor-001
X-Api-Key: <sandbox key>
{
"Type": "Business",
"RegisteredName": "Acme Corporation",
"RegistrationNumber": "12-3456789",
"RegistrationCountry": "US",
"RegisteredAddress": { "Street": "123 Main Street", "City": "San Francisco",
"PostCode": "94105", "State": "CA", "Country": "US" },
"IncorporationDate": "2010-03-15"
}
Store the CustomerID against the same compliance profile in your system. Every later payout references it.
Step 2: Find the payout channel at runtime
A channel is Noah's term for a payment route with fixed details: country, fiat currency, and payment method type, plus its own fees and limits. The Channels page says a Country code of XX marks a channel usable across multiple countries.
First call GET /channels/sell/countries. Then call GET /channels/sell with Country, CryptoCurrency, FiatCurrency, and optionally FiatAmount to get price calculations back.
GET https://api.sandbox.noah.com/v1/channels/sell?Country=US&CryptoCurrency=USDC_TEST&FiatCurrency=USD
X-Api-Key: <sandbox key>
Noah's sandbox demo response in the recipe returns three US channels. The values below are illustrative sandbox output, not a price list:
| PaymentMethodType | Demo TotalFee | Demo limits | Demo ProcessingSeconds |
|---|---|---|---|
| TokenizedCard | 4.5 | 1.2 to 1,000,000 | 60 |
| BankFedwire | 0.03 | 0 to 15,000 | 86400 |
| BankAch | 0.03 | 0 to 15,000 | 86400 |
| Source | Noah Direct Payout recipe | Sandbox demo body | Not an SLA |
Step 3: Render or fill the dynamic form
Each channel needs different recipient data. Call GET /channels/{ChannelID}/form to get a JSON Schema FormSchema. For the US BankFedwire channel in Noah's recipe, the required fields are AccountHolderAddress, BankDetails (AccountNumber and a 9-digit routing BankCode), and PaymentPurpose.
Outside the US the schema changes. Noah's Channels page shows a German EUR channel whose AccountNumber field is a 22-character IBAN validated against the pattern ^DE[0-9]{2}[A-Z0-9]{18}$. That's the point of the dynamic form: your UI doesn't hardcode per-country bank rules.
Returning recipients are cheaper to handle. If you pass an existing PaymentMethodID, Noah requests only the fields it doesn't already hold, per the recipe's prepare notes.
Step 4: Prepare the transaction
Call POST /transactions/sell/prepare with ChannelID, CryptoCurrency, FiatAmount, and the Form. Prepare does two jobs: it returns the freshest pricing estimate and pre-validates the form data.
POST https://api.sandbox.noah.com/v1/transactions/sell/prepare
{
"ChannelID": "<BankFedwire channel ID from Step 2>",
"CryptoCurrency": "USDC_TEST",
"FiatAmount": "1000.0",
"Form": {
"AccountHolderAddress": { "Address": "123 Main Street", "City": "New York",
"State": "NY", "PostalCode": "10001" },
"BankDetails": { "AccountNumber": "12345678", "BankCode": "123456789" },
"PaymentPurpose": "Contractor invoice"
}
}
The response carries four fields you must persist:
- CryptoAmountEstimate: estimated stablecoin spent.
- CryptoAuthorizedAmount: the maximum Noah may charge you. Noah suggests sizing it from GET /prices plus a slippage buffer that matches your risk appetite.
- FormSessionID: the handle you submit in Step 5.
- TotalFee: the channel fee, always in the fiat currency of the payout.
Field definitions come from Noah's Direct Payout recipe. If you settle with an end customer, debit them in your own ledger using FiatAmount as the reference for absorbing or passing on fees.
Step 5: Submit the sell with a Nonce
Call POST /transactions/sell with CryptoCurrency, FiatAmount, CryptoAuthorizedAmount, FormSessionID, a unique Nonce, and your own ExternalID for reconciliation.
POST https://api.sandbox.noah.com/v1/transactions/sell
{
"CryptoCurrency": "USDC_TEST",
"FiatAmount": "1000.0",
"CryptoAuthorizedAmount": "1010.03",
"FormSessionID": "<from prepare>",
"Nonce": "<new UUID per payout>",
"ExternalID": "invoice-2026-10-0042"
}
Noah's Idempotence page explains why the Nonce matters. It guarantees transaction idempotency, not request idempotency, and it has no expiration. Typical idempotency keys expire after 24 hours, which leaves a gap if a response never arrives.
Balance behavior is specific. On creation, your AvailableBalance drops immediately. If price moves past your ceiling, Noah cancels and refunds AvailableBalance. On settlement, TotalBalance drops by the final amount and AvailableBalance is adjusted for any gap versus CryptoAuthorizedAmount, per the recipe.
Step 6: Track the payout with webhooks
The Transaction webhook fires on creation and whenever Status, SubStatus, Refunds, or RFI changes. Status is one of three values: Pending, Failed, or Settled, per Noah's Transaction Event reference.
| SubStatus (while Pending) | Meaning per Noah |
|---|---|
| AmlScreening | Automatic compliance, KYT, or travel-rule screening in flight |
| UnderReview | Payment held for transaction-monitoring review |
| Submitted | Outbound payment sent to the external provider |
| Confirming | Provider processing, awaiting final confirmation |
Plan for RFIs too. When Noah opens a request for information, the RFI object moves through AwaitingCustomer, UnderReview, Closed, and Completed. Noah's compliance freeze page says a customer has 10 days to supply requested documents before the transaction is rejected and refunded. For a payout funded from a prefunded dashboard balance, the refund goes back to the Custodian Stablecoin Account.
Worked example: a $1,000 Fedwire payout funded with USDC
Here's the full sandbox run using the numbers in Noah's Direct Payout recipe. A SaaS platform pays a US contractor's business account by wire.
- PUT the business customer (acme-contractor-001).
- GET /channels/sell for US, USDC_TEST, USD; pick the BankFedwire channel ID returned today.
- GET the channel form; fill AccountHolderAddress, BankDetails, PaymentPurpose.
- Prepare with FiatAmount 1000.0. Demo response: TotalFee 0.03, CryptoAmountEstimate 1000.03, CryptoAuthorizedAmount 1010.03.
- Submit the sell with the FormSessionID, a fresh Nonce, and ExternalID set to the invoice number.
- Wait for the Transaction webhook to move from Pending to Settled before marking the invoice paid.
Stablecoin Insider's math on those documented demo values: the ceiling (1010.03) sits 10.00 USDC above the estimate (1000.03), a buffer of about 1.0%. The fee itself is 0.03 on a 1,000 payout, or 0.003%. In production, size your buffer from live GET /prices data rather than copying 1%.
Global Payout vs Automated Payout: pick the right Noah product
Noah ships a second payout product. The Automated Payout recipe uses POST /workflows/onchain-deposit-to-payment-method to trigger a fiat payout whenever a crypto deposit is detected, which removes the need to pre-fund.
| Question | Global Payout (sell) | Automated Payout (workflow) |
|---|---|---|
| Who funds it | Your prefunded Noah balance | A customer's onchain deposit |
| Trigger | Your API call per payout | Deposit detected on a designated address |
| Best for | Contractor runs, marketplace settlements, B2B invoices | Offramp-on-deposit flows where users send USDC themselves |
| Key endpoint | POST /transactions/sell | POST /workflows/onchain-deposit-to-payment-method |
Noah also offers a hosted offramp interface and manual dashboard payouts, per the product page. The same page puts white-label integration at 2 to 3 weeks from contract to go-live.
How Noah compares with other stablecoin payout rails
| Question | Noah | BlindPay | Modern Treasury |
|---|---|---|---|
| What the recipient gets | Local fiat on a runtime channel (bank, mobile money, wallet, cash pickup) | Bank fiat on documented rails | Stablecoin wallet credit via Payment Orders |
| Pricing handle | Prepare: estimate plus CryptoAuthorizedAmount ceiling | Short-lived payout quote | Payment Order amount |
| Retry safety | Non-expiring Nonce | Single-use quote ID | Platform idempotency |
| SCI guide | This post | BlindPay how-to | Modern Treasury how-to |
Other sibling guides: How to Send a zerohash Stablecoin Payout, How to Send a Ripple Payments Direct USDC Payout, and How to Create a Bridge Liquidation Address for Tempo USDC. For the market view, see Best Stablecoin On/Off-Ramps Compared, stablecoin payouts on Tron vs Solana, stablecoin transfers for cross-border payroll, and cross-border payments on stablecoin rails.
Where Noah payouts break
- Hardcoded channel IDs. Noah says they change; cache them and payouts fail.
- Thin CryptoAuthorizedAmount. Too tight a ceiling and price moves cancel the sell.
- Unsigned production calls. Sandbox tolerates a missing Api-Signature; production doesn't.
- Ignoring RFIs. A 10-day document window can stall a contractor run if nobody owns it.
- Assuming a fee schedule. Noah publishes no fixed price list; the channel response is the quote.
Shipping a Noah stablecoin payout? Run one sandbox customer, one runtime channel lookup, one prepare, one Nonce-protected sell, and one Settled webhook before you touch production keys.
Need a bank offramp with a short-lived quote instead? Compare the BlindPay flow next.
FAQ
What is a Noah stablecoin payout?
It's a sell transaction on Noah's Business API that converts stablecoins from your balance into local fiat and pays a recipient through a channel such as Fedwire, ACH, SEPA, or mobile money.
How many currencies does Noah pay out in?
Noah says over 120 fiat currencies across 60+ countries on its Global Payout page. Check GET /channels/sell/countries for what your account can reach today.
Which API calls does a Noah payout need?
Five, in order: GET /channels/sell/countries, GET /channels/sell, GET /channels/{ChannelID}/form, POST /transactions/sell/prepare, and POST /transactions/sell.
Can you cache Noah channel IDs?
No. Noah's docs say channel IDs must be read at runtime because they aren't stable and their limits change.
How does Noah prevent duplicate payouts?
Every transactional call requires a unique Nonce. Noah's nonce guarantees the transaction runs once and doesn't expire, unlike 24-hour idempotency keys.
What does CryptoAuthorizedAmount do?
It caps how much stablecoin Noah can spend on the payout. If the price moves beyond it, Noah cancels the sell and refunds your available balance.
Do you need your own license to use Noah?
Not necessarily. Unlicensed technology providers use the Standard model, where Noah runs KYC. Regulated firms can use the Reliance model and share their own KYC data.
How do you know a Noah payout landed?
Listen for the Transaction webhook. Status moves from Pending to Settled on success or Failed otherwise, with SubStatus detail while pending.
This content is provided for informational and educational purposes only and does not constitute financial, investment, legal, or tax advice; no material herein should be interpreted as a recommendation, endorsement, or solicitation to buy or sell.