Bank payouts

Choose the recipe for paying a bank account: US ACH, wire or RTP, SWIFT, SEPA, Faster Payments, moves between own accounts, and what to do after you send.

Use these recipes to pay a bank account. In the US you pay by ACH, wire or RTP. Abroad you pay by SWIFT in USD, in Europe by SEPA in EUR, and in the UK by Faster Payments in GBP.

Each recipe lists what to collect first, which call tells you the required fields, the full requests and responses, and the errors the API returns when something is wrong.

For payouts to local bank accounts and mobile wallets in Africa, Latin America and Asia, and for crypto payouts, see Remittance and crypto.

A money example to keep in mind. Your customer's USD account holds 10,000.00 USD. You pay a contractor 2,500.00 USD by ACH, with a 1.50 USD fee on your plan. Gravv debits the account 2,501.50 USD and the response shows pending. You receive transfer.status.completed when the bank confirms the payment. Each recipe below follows this pattern.

Choose your recipe

You want to Rail Recipe
Move money between two accounts your customer holds at Gravv none Move money between own accounts
Pay a US bank account in 1 to 3 business days, at the lowest cost ach Pay a US bank account by ACH
Pay a large US amount the same day wire Send a same-day US domestic wire
Pay a US account instantly from a bank-held USD account rtp Pay a US bank account instantly by RTP
Pay the same US account on two rails ach and wire Save one US account for both ACH and wire
Pay a company abroad in USD, with an invoice swift Pay a supplier abroad by SWIFT
Pay a person abroad in USD, and answer a document pause swift Pay a person abroad by SWIFT
Pay a euro IBAN sepa Pay a euro account by SEPA
Pay a UK sort code and account number fps Pay a UK account by Faster Payments

After you send:

Situation Recipe
A payee is stuck in setup_failed Fix a payee that failed setup
A transfer paused for a limit or for sender details Stay within transfer limits
You want to follow a payout to the end, including failures, returns and manual review Follow a payout to completion

Which source account can pay which rail

Read the source with GET /v2/accounts/{id}. A bank-held account is a real account at a US bank in your customer's name. A wallet-backed account holds its balance as a stablecoin and converts it when it pays out.

Source account ACH Wire (US) RTP SWIFT (USD) SEPA (EUR) Faster Payments (GBP)
Bank-held USD account Available Available Available Available to Nigeria. Not yet available elsewhere Not supported Not supported
Wallet-backed account Available Available Not supported Not yet available Available where your business is enabled Available where your business is enabled

Gravv does not support CHAPS, FedNow or BACS as rails. For the full coverage list, see Payments and supported countries.

Rules every recipe relies on

  • Send every request to https://api.gravv.xyz with your key in the Api-Key header. A key that starts with grvSec_sandbox_ reaches sandbox. Any other key reaches live.
  • Every POST needs its own new Idempotency-Key (except verify and the webhook resend). Gravv replays a 4xx response for 24 hours under its key, so use a new key after you fix a request.
  • Send amounts as strings with at most 2 decimals, such as "2500.00".
  • Put rail inside the destination object.
  • An HTTP 200 does not always mean the money is on its way. Read transfer_status, which is pending or paused.
  • Most errors return HTTP 400 with the reason in error. Some errors also carry a code. Match on the message.
  • Deduplicate webhooks on the event_id in the body, never on X-Event-ID.
Was this page helpful?