Instant USD with ACH

Fund your account via ACH and unlock an immediate available balance.

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
  }
}

Available Balance

It can take 3-5 days for ACH transactions to settle. In the meantime, zerohash offers end customers an immediate available balance to make trades. In the Instant ACH flow, funds are immediately transferred from the platform float to the participants available balance. The platform can expect to receive a transfer webhook with the following information:

{
    "account_group": "F12JE6",
    "account_label": "general",
    "account_type": "available",
    "asset": "USD",
    "balance": "5",
    "movements": [
        {
            "account_id": "efeb40fe-aaf1-4132-8fbc-036e7612f7db",
            "change": "5",
            "movement_id": "b96daa8d-960a-4c50-acc1-af9c1c9c178b",
            "movement_timestamp": 1746112183373,
            "movement_type": "transfer",
            "transfer_request_id": "339910",
            "transfer_type": "trade_allocation"
        }
    ],
    "participant_code": "45JM2Q",
    "run_id": "4150531",
    "run_type": "transfer",
    "timestamp": 1746112183373
}

Buy Crypto with USD Instantly

End customers are immediately able to purchase crypto using the available balance in their participant account with zerohash’s CLOB liquidity endpoints.

Crypto buy orders will settle immediately even if the ACH deposit has not settled. 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',
    'asset': '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"
}



{
  '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

Platforms must maintain a funded loss reserve and float account. 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.

  • If an ACH fails before settlement and buying power 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 float account.
  • If an ACH is returned after settlement and funds cannot be recovered from the participant account, zerohash will recover losses from the Platform’s loss reserve account.