Instant USD with ACH
Fund your account via ACH and unlock buying power instantly.
Onboarding
Platforms must use zerohash Powered Plaid Link or Self Service Plaid Link to verify and link end customer bank accounts. Once an external account has been created and linked to a Participant account, Platforms can make ACH deposited funds instantly available to the end customer using zerohash Instant USD.
Request an Instant Fiat Deposit
POST /fund/deposit
Sample Request
{
'message': {
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'asset': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'network': 'ach',
'instant': true
}
}
Sample Response
{
'message': {
'request_id': '0f65678e-2114-469d-b505-c850d776e078',
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'asset': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'transaction_id': '0f34533e-2114-469d-b505-c850d776e061',
'status': 'submitted',
'created_at': 1561996924964
}
}
Buying Power
It can take 1-2 days for ACH transactions to settle. In the meantime, zerohash offers end customers buying power to make trades immediately.
Once an instant ACH deposit passes fraud checks and updates to pending
, platforms will receive a corresponding webhook informing them of the end customer's updated buying_power
:
{
'message': {
'request_id': '0f65678e-2114-469d-b505-c850d776e078',
'participant_code': 'ABC123',
'currency': 'USD',
'balance': '150.00',
'buying_power': '150.00',
'updated_at': 1561996924964
}
}
Buying power will not always equate to the exact ACH amount pending settlement. A maximum buying power per end customer’s participant account is determined by the linked external account used to make the deposit. zerohash considers that account’s balance, transaction velocity, and history of chargebacks. The Platform’s loss reserve balance can also impact an end customer’s buying power.
For more information on how buying power is calculated, contact your zerohash relationship manager.
Buy Crypto with USD Buying Power
End customers are immediately able to purchase crypto using the available buying power balance in their participant account with zerohash’s CLOB liquidity endpoints.
Crypto buy orders will remain in a pending state until the ACH deposit settles. Platforms will receive web hooks for both events that look like this:
ACH Deposit Settlement
zerohash returns a webhook with 'status': 'settled'
when an ACH deposit clears.
{
'message': {
'request_id': '0f65678e-2114-469d-b505-c850d776e078',
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'currency': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'transfer_type': 'debit',
'transaction_id': '0f34533e-2114-469d-b505-c850d776e061',
'status': 'settled',
'created_at': 1561996924964
}
}
Crypto Buy Settlement
zerohash returns a webhook with 'trade_state': 'terminated'
when an buy order settles. Find more information on trade webhooks here.
{
"client_trade_id": "b3fbcf52-95f9-4624-9309-4f1306bdb176",
"contract_size": "1",
"market_identifier_code": "SCXM",
"origin": "liquidity",
"parties": [
{
"account_label": "general",
"amount": "10",
"asset": "USD",
"participant_code": "PART1",
"settling": true,
"side": "sell"
},
{
"account_label": "inventory",
"amount": "0.0057236",
"asset": "ETH",
"participant_code": "00SCXM",
"settling": true,
"side": "buy"
}
],
"parties_anonymous": false,
"physical_delivery": true,
"platform_code": "00SCXM",
"product_type": "spot",
"quoted_currency": "USD",
"symbol": "ETH/USD",
"timestamp": 1745554838289,
"total_notional": "10.00",
"trade_id": "26d68f16-f9d2-4ab3-847e-bccf6f03a35e",
"trade_price": "1747.1521420085261025",
"trade_quantity": "0.0057236",
"trade_reporter": "00SCXM",
"trade_reporter_code": "00SCXM",
"trade_state": "terminated",
"trade_type": "regular",
"transaction_timestamp": 1745554838000,
"underlying": "ETH"
}
Withdrawals
Withdrawals can only be made with funds from settled deposits.
POST /fund/withdraw
Sample Request
{
'message': {
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'asset': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'network': 'ach',
}
}
Sample Response
{
'message': {
'request_id': '0f65678e-2114-469d-b505-c850d776e078',
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'asset': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'transaction_id': '0f34533e-2114-469d-b505-c850d776e061',
'status': 'submitted',
'created_at': 1561996924964
}
}
Check Deposit or Withdrawal Status
Shares the current status of a fiat deposit or withdrawal. Platforms should use the GET /fund/deposit and GET fund/withdraw endpoint to understand funds availability and make their own decisions on how and when to make crypto available to end customers.
GET /fund/deposit or GET /fund/withdraw
Sample Request
{
'message': {
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'asset': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'network': 'ach',
}
}
Sample Response
{
'message': {
'request_id': '0f65678e-2114-469d-b505-c850d776e078',
'participant_code': 'ABC123',
'external_account_id': '0f68333e-2114-469d-b505-c850d776e063',
'asset': 'USD',
'amount': '150.00',
'description': 'COMPANY0',
'transaction_id': '0f34533e-2114-469d-b505-c850d776e061',
'status': 'submitted',
'created_at': 1561996924964
}
}
Payment Statuses
Status | Description | Final? |
---|---|---|
submitted | Transaction request has been received | - |
pending_trade | Transaction request has been approved, but the associated trade has not terminated. | - |
pending | The associated trade has terminated and the fiat payment has been initiated | - |
posted | Transaction has settled and cleared any applicable hold days. Transaction will be reconciled with internal ledger. | - |
settled | Transaction is complete and funds have been credited to platform float | ✔️ |
canceled | ACH On-demand transactions can not be canceled | ✔️ |
failed | Transaction request failed, no payment was initiated | ✔️ |
rejected | Transaction request was rejected due to velocity checks, no payment was initiated | ✔️ |
returned | Transaction request was initially approved but the ACH has returned unsuccessfully, before the transaction reached a 'Settled' state | ✔️ |
returned_settled | Transaction request was initially approved but the ACH has returned unsuccessfully, after the transaction reached a 'Settled' state | ✔️ |
Final states
States marked are all possible end-states for a transaction, though a transaction can move from
settled
→returned
ACH Returns
When an ACH deposit fails, the participant account’s balance and buying power will be deducted accordingly. If buying power has already been used to initiate a crypto buy order, the pending order will be canceled. Losses will be recovered from the Platform's loss reserve account.
- If a returned ACH has been used to purchase an asset, zerohash will seize it from the participant account, liquidate it, and recover any losses from the Platform’s loss reserve account.
- If a returned ACH has been withdrawn from the participant account, zerohash will recover losses from the Platform’s loss reserve account.
Updated about 13 hours ago