Skip to main content
Outbound FedNow uses a Transfer. Brale redeems stablecoins from a funded Brale internal Address and sends USD to a recipient bank Address over FedNow. You create one Transfer for each payout.
FedNow payouts are available on Brale accounts where FedNow has been enabled. Contact [email protected] to confirm enablement.

Prerequisites

  • A Brale Account with status: complete.
  • API credentials with the addresses:write, addresses:read, transfers:write, and transfers:read scopes.
  • A Brale internal (custodial) Address that holds the stablecoin you will redeem.
  • The recipient’s bank details: owner name, account number, routing number, and account type. The recipient’s bank must participate in FedNow.
Brale can only pay out stablecoins already held in a Brale internal Address. The API cannot debit an external or self-custody wallet. Send those stablecoins onchain to your Brale internal Address first, then create the payout.

Step 1: Fund a Brale internal Address

Fund the internal Address you will use as the payout source. For example, mint to it with an onramp or send stablecoins to its onchain address. Check its balance before you create a payout. See Get a balance. Note the Address’s id, the stablecoin value_type it holds (for example, USDB), and the network transfer_type it holds it on (for example, spark). You will use all three in the Transfer.

Step 2: Register or upgrade the recipient bank Address

FedNow recipients use the fednow_credit transfer type on an external bank Address. Register recipients with Direct bank entry or Plaid. fednow_credit is available only on accounts it has been enabled for.

Option A: Create a new FedNow recipient

bank_address and beneficiary_address are not required for a FedNow-only recipient. They are required only when transfer_types includes wire.
Send account_number and routing_number as strings so leading zeros are preserved. You can request other rails in the same call, for example ["ach_credit", "fednow_credit"]. If you include wire, also send bank_address and beneficiary_address.
Response (201)

Option B: Add FedNow to an existing recipient

To add FedNow to an existing bank Address, such as an RTP recipient, send additional_transfer_types:
  • Brale merges fednow_credit into the Address’s existing transfer_types. An Address with ["ach_credit", "rtp_credit"] becomes ["ach_credit", "rtp_credit", "fednow_credit"].
  • The Address id does not change. Keep using the same address_id for all rails.
  • Sending a transfer type that is already enabled has no additional effect.
  • PATCH requests do not take an Idempotency-Key header.

Registration errors

Response (422)

Step 3: Confirm the recipient supports FedNow

Retrieve the Address and confirm that status is active and transfer_types includes fednow_credit:
Only create a FedNow payout after both conditions are true. If fednow_credit is missing, do not send the payout on another rail automatically. Choose the rail explicitly.

Step 4: Create the payout Transfer

Request
  • source.address_id is your funded Brale internal Address.
  • source.value_type and source.transfer_type must match the token and network that Address holds. If the Address holds SBC on solana, send "value_type": "SBC" and "transfer_type": "solana".
  • destination.address_id is the recipient bank Address with fednow_credit enabled.
  • Generate one Idempotency-Key per logical payout and store it with your payout record before you send the request.
Response (201)
201 Created means Brale created the Transfer. It does not mean the recipient has been paid.

Step 5: Track the payout

Track the Transfer until it reaches complete, canceled, or failed:
  • Subscribe to transfer.* webhooks. transfer.completed means the Transfer reached complete. See Webhook events.
  • Or poll GET /accounts/{account_id}/transfers/36JqTB7hN3pQe5ZuWv0XkLr2sGc with exponential backoff.
  • To list payouts to a recipient, call GET /accounts/{account_id}/transfers?address_id=<recipient_bank_address_id> and check destination.transfer_type. The transfer_type query parameter filters by blockchain only and does not accept fednow_credit.
Webhook deliveries are at-least-once and unordered. Deduplicate on the envelope id, and retrieve the Transfer when you need its current state.

Handle a pending payout safely

  1. Keep tracking the original Transfer by its id. A FedNow payout can stay pending or processing while Brale reviews and submits it.
  2. If your create request timed out or returned 5xx or 429, retry with the same Idempotency-Key and the same body. Brale returns the original Transfer instead of creating a second one.
  3. Do not create a replacement payout with a new key because the first one is still pending. Both could be paid.
  4. If you need to stop a payout, contact [email protected] immediately. Brale can cancel a payout only before it is submitted to FedNow. A processing payout cannot be canceled, and pending does not guarantee that cancellation is still possible.
  5. Create a new payout only after the original reaches canceled or failed, and use a new Idempotency-Key.

Cancellation compared with returns

A canceled Transfer was stopped before Brale sent the payment. A return after settlement is a separate event. Do not assume an automatic refund. The Transfer status enum also includes compliance review, refunding, and refunded. Treat them as not complete and keep tracking the Transfer. Check failure on failed Transfers when it is present.

Errors and retries

Test outbound payouts

Testnet does not send real FedNow payments. When you submit a redemption on testnet, Brale burns the stablecoin onchain and skips the fiat payout. See Burn tokens on testnets. On testnet you can:
  • Fund internal Addresses on testnet networks with testnet mints.
  • Exercise redemption Transfers, idempotency handling, and status tracking without moving real USD.
  • Validate your FedNow request construction against the examples on this page.
If a testnet request with destination.transfer_type: "fednow_credit" is rejected on your account, contact support to confirm testnet FedNow enablement. Confirm end-to-end FedNow payouts on mainnet with a small amount, such as 1.00 USD, to a recipient you control.