Funding
Before funding, the customer needs an open account. For fiat funding, link an ACH incoming transfer method, then create a fiat contribution. Crypto deposits use asset contribution / awaiting-deposit.
Resolve currency IDs first:
GET /fiat: pick the USDfiatIdGET /asset: pick the BitcoinassetIdwhen depositing crypto
Link Incoming Bank Method (ACH)
Connect the customer's bank for ACH deposits.
POST /fiat-transfer-methodtransferDirection: "INCOMING"fundsTransferType: "ACH"
Example payload:
{
"accountId": "<accountId>",
"fiatId": "<fiatId>",
"transferDirection": "INCOMING",
"fundsTransferType": "ACH",
"label": "Customer ACH in",
"bankName": "Test Bank",
"bankAccountName": "Jane Doe",
"bankAccountNumber": "1234567890",
"bankAccountType": "CHECKING",
"routingNumber": "021000021",
"last4": "7890",
"bankAddress1": "1 Federal Reserve Plaza",
"bankCity": "New York",
"bankState": "NY",
"bankPostalCode": "10045",
"bankCountryCode": "US",
"async": false
}
Store the returned fiatTransferMethodId.
Creating the method does not always make it immediately usable for every rail. Outbound ACH especially may return FIAT_TRANSFER_METHOD_NOT_READY until verificationState is approved. See Withdrawals.
Fiat Funding (ACH Contribution)
Pull USD from the linked incoming method into the account.
POST /fiat-contributionunitCount: amount in USD cents as a string (e.g."10000"= $100.00)acceptAchAuthorizationTerms: true: required for ACH depositscurrencyType: "USD"
Example payload:
{
"accountId": "<accountId>",
"fiatTransferMethodId": "<incomingFiatTransferMethodId>",
"fiatId": "<fiatId>",
"unitCount": "10000",
"currencyType": "USD",
"acceptAchAuthorizationTerms": true
}
After a successful contribution create, settled balance on account-fiat-total may stay 0 until the ACH clears. Poll balances rather than treating the create response as immediately available cash.
Check Fiat Balances
GET /account-fiat-total?accountId={accountId}
Use this to confirm deposits after settlement. For crypto balances, use GET /account-asset-total?accountId={accountId}.
Crypto Funding (Optional)
To receive crypto into a payments-core account:
POST /asset-contribution: record / initiate an asset contribution when you already have the transfer-method contextPOST /asset-contribution/awaiting-deposit: declare that you are waiting on an inbound deposit (deposit-address / pending inbound flow)
Exact body fields depend on your asset transfer method setup. Reach out if you need the deposit-address path enabled for your org.
Next Steps
- Conversions: Buy or sell Bitcoin
- Withdrawals: Send funds out