General
ZHLS provides liquidity via a Request for Quote system which gives platforms access to multiple liquidity providers, resulting in a more efficient market.
Quantity Precision - Represents the smallest unit that a platform can submit on an order when providing a quantity.
Any ending zeros will be dropped from the price and quantity precision.
The supported fiat currency is USD.
The supported fiat currency must be in the account prior to exchange to prevent delayed settlement.
Supported Assets
Please refer to the ‘What assets do you support?’ page to view supported Liquidity (RFQ) assets.
Technology
General Guidelines
- All quotes expire after 5 seconds.
- Certain configurations need to be made by the Zero Hash Client Services team. Please reach out via a shared Slack or Telegram channel to enquire about using the product.
- We currently support 3 different models (See below sections for details). Work directly with a Zero Hash representative to learn which suits your platform best:
Model |
Platform a counterparty to trades? |
Credit Check |
Notes |
Standard | Yes | Platform's Account |
|
Novated | No | Float Account |
|
Platform Direct | No | Platform Customer Account |
|
High Level Flow - All Models
API Documentation
Models
Standard Step-by-Step
1. Get a quote
- Send a
GET /liquidity/rfq
request. - Assume a Platform with the participant_code PLAT01 is submitting this request
- Request examples with parameters (you must enter either a quantity or total figure):
Quantity
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"quantity": 1
Total
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"total": 65000
2. Receive response
- Response example (applicable to both Quantity and Total example above)
{
"message": {
"request_id": "ce819fe8-b1d7-43bb-961c-e09ede0988d3",
"participant_code": "PLAT01",
"quoted_currency": "USD",
"side": "buy",
"quantity": "1",
"price": "65000",
"quote_id": "5cd07738b861c31e3bd61467BTC1Buy1568311644602",
"expire_ts": 1624314992377,
"account_group": "00SCXM",
"account_label": "general",
"underlying": "BTC"
}
}
3. Execute order
- Send a
POST /liquidity/execute
request using the quote_id from the response in step 2. - The credit check is done on the PLAT01's USD balance, 00SCXM account group.
- You will have 5 seconds before the quote expires.
- Execution example:
{
“quote_id”: “5cd07738b861c31e3bd61467BTC1Buy1568311644602"
}
4. Receive confirmation
{
“request_id:” “14f8ebb8-7530-4aa4-bef9-9d73d56313f3",
“quote”: {
“request_id”:“ce819fe8-b1d7-43bb-961c-e09ede0988d3”,
“participant_code”: “PLAT01”,
“underlying_currency”: “BTC”,
“quoted_currency”: “USD”,
“side”: “BUY”,
“quantity”: “1”,
“price”: “65000”,
“quote_id”: “5cd07738b861c31e3bd61467BTC1Buy1568311644602”,
“expire_ts”: 1568311649602,
"account_group": "00SCXM",
"account_label": "general,
},
“trade_id”: “ba97133e-ab15-4c86-86c1-86671b8420bc”,
“status”: “Completed”
}
When your trade has completed, the asset that the platform purchased will be auto-allocated to the Zero Hash Liquidity Services (00SCXM) platform, or account group. If you wish to allocate assets purchased via the liquidity stream to a separate account group, you will need to do this via the allocations page on the portal or the POST /transfers endpoint.
Novated Step-by-Step
1. Get a quote
- Send a
GET /liquidity/rfq
request - Enter your customer participant code as participant_code
- Request examples with parameters:
Quantity
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"participant_code":"CUST01",
"quantity": 1
Total
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"participant_code":"CUST01",
"total": 20000
2. Receive response
- obo: on-behalf-of
- Response example:
{
"message": {
"request_id": "ad476ea9-90d0-4cbb-a785-10af88889e91",
"participant_code": "PLAT01",
"quoted_currency": "USD",
"side": "buy",
"quantity": "1",
"price": "20000",
"quote_id": "51fee850-1e2e-4cf9-933e-00911052785b",
"expire_ts": 1670013576526,
"account_group": "00SCXM",
"account_label": "general",
"obo_participant": {
"participant_code": "CUST01",
"account_group": "PLAT01",
"account_label": "general"
},
"underlying": "BTC",
"asset_cost_notional": "20000"
}
}
3. Execute order
- Send a
POST /liquidity/execute
request using the quote_id from the response in step 2. - The credit check is done on the PLAT01's Float Account. This is under the 00SCXM participant code, PLAT01 account group.
- You will have 5 seconds before the quote expires.
- Execution example:
{
“quote_id”: “51fee850-1e2e-4cf9-933e-00911052785b"
}
4. Receive confirmation
{
"message": {
"request_id": "d0b02e44-6e30-48af-bf30-4961d0b2f878",
"quote": {
"request_id": "ad476ea9-90d0-4cbb-a785-10af88889e91",
"participant_code": "PLAT01",
"quoted_currency": "USD",
"side": "buy",
"quantity": "1",
"price": "20000",
"quote_id": "51fee850-1e2e-4cf9-933e-00911052785b",
"expire_ts": 1670013576526,
"account_group": "00SCXM",
"account_label": "general",
"obo_participant": {
"participant_code": "CUST01",
"account_group": "PLAT01",
"account_label": "general"
},
"underlying": "BTC",
"asset_cost_notional": "20000",
"transaction_timestamp": 1670013573726
},
"trade_id": "2d8d4215-0dcc-437f-9676-e7408faef55d",
"status": "Completed",
"trade_ids_list": [
"2d8d4215-0dcc-437f-9676-e7408faef55d"
]
}
}
Trade ID is a single trade where both the crypto and fiat legs settle immediately.
Novated Deferred Step-by-Step
1. Get a quote
- Send a
GET /liquidity/rfq
request - Enter your customer participant code as participant_code
- Request examples with parameters:
Quantity
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"participant_code":"CUST01",
"quantity": 1
Total
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"participant_code":"CUST01",
"total": 20000
2. Receive response
- obo: on-behalf-of
- Response example:
{
"message": {
"request_id": "bb2699bd-2806-4527-966d-c2819e5452fd",
"participant_code": "PLAT01",
"quoted_currency": "USD",
"side": "buy",
"quantity": "1",
"price": "20000",
"quote_id": "d4461760-6416-4da1-80a6-de45b6c9458b",
"expire_ts": 1670014554460,
"account_group": "00SCXM",
"account_label": "general",
"obo_participant": {
"participant_code": "CUST01",
"account_group": "PLAT01",
"account_label": "general"
},
"underlying": "BTC"
"asset_cost_notional": "20000"
}
}
3. Execute order
- Send a
POST /liquidity/execute
request using the quote_id from the response in step 2. - The credit check is done on the PLAT01's Float Account. This is under the 00SCXM participant code, PLAT01 account group.
- You will have 5 seconds before the quote expires.
- Execution example:
{
“quote_id”: “d4461760-6416-4da1-80a6-de45b6c9458b"
}
4. Receive confirmation
{
"message": {
“request_id:” “6c503408-9590-4aca-ba0a-f1fc460fa466",
“quote”: {
“request_id”:“bb2699bd-2806-4527-966d-c2819e5452fd”,
“participant_code”: “PLAT01”,
“quoted_currency”: “USD”,
“side”: “buy”,
“quantity”: “1”,
“price”: “20000”,
“quote_id”: “d4461760-6416-4da1-80a6-de45b6c9458b”,
“expire_ts”: 1670014554460,
"account_group": "00SCXM",
"account_label": "general",
"obo_participant": {
"participant_code": "CUST01",
"account_group": "PLAT01",
"account_label": "general"
},
"underlying": "BTC",
"asset_cost_notional": "20000",
"transaction_timestamp": 1670014551296
},
"trade_id": "4381f259-8dc5-410e-bb1e-131e28d19108",
"status": "Completed",
"trade_ids_list": [
“4381f259-8dc5-410e-bb1e-131e28d19108”,
"9882148b-c703-459b-b86c-ece4ffd1bb32"
]
}
}
You will receive 2 trade id's in the response. 1 is settling the crypto leg immediately into the customer account, and the other trade is reserved for the USD leg, which will settle on a T+X basis.
Platform Direct Step-by-Step
1. Get a quote
- Send a
GET /liquidity/rfq
request. - Enter your customer participant code as participant_code
- Request examples with parameters:
Quantity
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"participant_code":"CUST01",
"quantity": 1
Total
"side":"buy",
"underlying":"BTC",
"quoted_currency":"USD",
"participant_code":"CUST01",
"total": 65000
2. Receive response
- obo: on-behalf-of
- Response example:
{
"message": {
"request_id": "ce819fe8-b1d7-43bb-961c-e09ede0988d3",
"participant_code": "PLAT01",
"quoted_currency": "USD",
"side": "buy",
"quantity": "1",
"price": "65000",
"quote_id": "5cd07738b861c31e3bd61467BTC1Buy1568311644602",
"expire_ts": 1624314992377,
"account_group": "00SCXM",
"account_label": "general",
"obo_participant": {
"participant_code": "CUST01",
"account_group": "PLAT01",
"account_label": "general"
},
"underlying": "BTC"
}
}
3. Execute order
- Send a
POST /liquidity/execute
request using the quote_id from the response in step 2. - The credit check is done on the CUST01's USD account. This is under the CUST01 participant code, PLAT01 account group.
- You will have 5 seconds before the quote expires.
- Execution example:
{
“quote_id”: “5cd07738b861c31e3bd61467BTC1Buy1568311644602"
}
4. Receive confirmation
{
“request_id:” “14f8ebb8-7530-4aa4-bef9-9d73d56313f3",
“quote”: {
“request_id”:“ce819fe8-b1d7-43bb-961c-e09ede0988d3”,
“participant_code”: “PLAT01”,
“underlying_currency”: “BTC”,
“quoted_currency”: “USD”,
“side”: “BUY”,
“quantity”: “1”,
“price”: “65000”,
“quote_id”: “5cd07738b861c31e3bd61467BTC1Buy1568311644602”,
“expire_ts”: 1568311649602,
"account_group": "00SCXM",
"account_label": "general",
"obo_participant": {
"participant_code": "CUST01",
"account_group": "PLAT01",
"account_label": "general"
},
“trade_id“:"ba97133e-ab15-4c86-86c1-86671b8420bc",
“status”: “Completed”
}