Skip to main content

Withdrawals

Send USD out of an open payments-core account with an outgoing fiat transfer method and a fiat disbursement. Crypto outflows use asset disbursement.


Create a separate outgoing rail (do not reuse the incoming method id for disbursements).

  • POST /fiat-transfer-method
  • transferDirection: "OUTGOING"
  • fundsTransferType: "ACH"

Example payload:

{
"accountId": "<accountId>",
"fiatId": "<fiatId>",
"transferDirection": "OUTGOING",
"fundsTransferType": "ACH",
"label": "Customer ACH out",
"bankName": "Test Bank",
"bankAccountName": "Jane Doe",
"bankAccountNumber": "0987654321",
"bankAccountType": "CHECKING",
"routingNumber": "021000021",
"last4": "4321",
"bankAddress1": "1 Federal Reserve Plaza",
"bankCity": "New York",
"bankState": "NY",
"bankPostalCode": "10045",
"bankCountryCode": "US",
"async": false
}
FIAT_TRANSFER_METHOD_NOT_READY

Disbursements fail with FIAT_TRANSFER_METHOD_NOT_READY until the bank method's verificationState is approved. Creating the method is not enough. Wait for bank verification before retrying.


Fiat Disbursement

  • POST /fiat-disbursement
  • unitCount: USD cents as a string
  • fiatTransferMethodId: the OUTGOING method id

Example payload:

{
"accountId": "<accountId>",
"fiatId": "<fiatId>",
"fiatTransferMethodId": "<outgoingFiatTransferMethodId>",
"unitCount": "1000",
"description": "Customer withdrawal"
}

Confirm available fiat with GET /account-fiat-total?accountId={accountId} before withdrawing.


Crypto Disbursement (Optional)

  • POST /asset-disbursement: send crypto from the payments-core account to an external destination via a ready asset transfer method

Ensure the asset transfer method is ready before calling; otherwise the platform rejects the disbursement similarly to the fiat not-ready case.


Putting It Together


Next Steps