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

StatusDescriptionFinal?
submittedTransaction request has been received-
pending_tradeTransaction request has been approved, but the associated trade has not terminated.-
pendingThe associated trade has terminated and the fiat payment has been initiated-
postedTransaction has settled and cleared any applicable hold days. Transaction will be reconciled with internal ledger.-
settledTransaction is complete and funds have been credited to platform float✔️
canceledACH On-demand transactions can not be canceled✔️
failedTransaction request failed, no payment was initiated✔️
rejectedTransaction request was rejected due to velocity checks, no payment was initiated✔️
returnedTransaction request was initially approved but the ACH has returned unsuccessfully, before the transaction reached a 'Settled' state✔️
returned_settledTransaction 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 settledreturned


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.