Release Details

Release Date: July 3rd, 2024

Release Type

Informational – Optional action from platforms

Summary

The origin field in our REST API specifies how a movement or trade was initiated, identifying whether it originated from our REST API, SDK, or the Secondary Portal. Each transaction is categorized with the following origin values based on its initiation method:

  • Rest API: rest_api
  • SDK: sdk
  • Secondary Portal: secondary

Endpoints Impacted

Relevant Documentation

Zero Hash is pleased to announce that as of today, July 1, 2024, we have begun offering crypto services in the State of Hawaii for both natural and non-natural (entity) persons.

This expansion of our geographic reach was made possible by the State of Hawaii’s determination that crypto services would not be covered by its money transmitter license regime when it announced on January 25, 2024, that its Digital Currency Innovation Lab would end operations on June 30, 2024.

Further Reading

To see the full list of all U.S. states and territories or possessions in which Zero Hash offers its products and services, refer to Permitted and Restricted Jurisdictions

We are pleased to announce that 3 additional assets are now available for deposits, withdrawals, buys, and sells in New York. Previously these assets were restricted even for platforms that had been approved for NY activity.


Updates in CERT and PROD environments

The following assets are enabled in CERT and PROD for all permitted NY activity:

  • Avalanche (AVAX)
  • XRP (XRP)
  • Solana (SOL)

Note: These changes only apply to the Base Asset and do not apply to any tokens or stablecoins on these networks. Please direct any questions to your Zero Hash support team.



Further Reading

To see the full list of supported Assets, please refer to our new documentation pages:

Release Date: May 23, 2024


Summary

As part of Zero Hash's support of the Lightning Network and UMA, there is new functionality to generate invoices to receive deposits.

More information can be found in our Lightning Network Integration Guide and FAQ or by contacting the Zero Hash team.



API Documentation References


Generate UMA Invoice in CERT

An invoice must be generated in order to receive a deposit over the Lightning Network. This step currently assumes you would like to use your own domain and manage your own UMA server, which will require working with the Zero Hash team to setup (support for ZH-managed available soon).

Once your UMA server is setup, a user must first be registered by your server and then sent to Zero Hash via POST /deposits/uma

Once successfully registered, that participant can then generate an invoice in CERT by calling: uma.cert.zerohash.com/.well-known/lnurlp

Note: if you will see the error message "UMA recipient not found" if attempting to generate an invoice without registering the participant first.



Generate UMA Invoice in PROD

Note that it is recommended to test these flows in CERT first. All platforms must be allow-listed to use Lightning and UMA in Production.


An invoice must be generated in order to receive a deposit over the Lightning Network. This step currently assumes you would like to use your own domain and manage your own UMA server, which will require working with the Zero Hash team to setup (support for ZH-managed available soon).

Once your UMA server is setup, a user must first be registered by your server and then sent to Zero Hash via POST /deposits/uma

Once successfully registered, that participant can then generate an invoice in PROD by calling: uma.zerohash.com/.well-known/lnurlp

Note: The above URL is unique to each environment. If you will see the error message "UMA recipient not found" if attempting to generate an invoice without registering the participant first.

Release Details

Release Date: June 12th, 2024

Release Type

Informational – Optional action from platforms

Summary

Zero Hash has created a new endpoint: PATCH /liquidity/rfq. Platforms can use this endpoint to update an existing, non-expired quote. There are 2 required fields:

  • quote_id: the id associated with a valid, non-expired quote that was returned from either GET or POST /liquidity/rfq
  • total: the notional value that you'd like to update the quote to reflect

And one optional object:

  • fees: object containing fee data
    • name: a string naming the fee
    • amount: the amount of the fee, denominated in the quoted currency of the original quote

Platforms should use the same execution endpoints, POST /liquidity/execute, to execute on the quotes updated via PATCH /liquidity/rfq.

Validations

  • If the platform omits the quote_id, we’ll return an error, "quote_id is a required field"
  • If the platform sends a quote_id that is valid but expired, we’ll return an error, "quoted_id has expired"
  • If the platform sends a fees object containing a name that is not an exact match to one from the original quote, we’ll return an error, “No fee with the submitted ‘name’ exists on this quote”
  • If the platform sends a fee object containing an amount that is non-numerical, we’ll return an error, “amount must be a positive integer”

API Behavior

  • Upon a successful PATCH /liquidity/rfq call, Zero Hash will function like the following:
    • The quote_id goes unchanged - we’ll keep constant with original POST /liquidity/rfq response
    • The expire_ts goes unchanged - we’ll keep constant with original POST /liquidity/rfq response
    • The trade_price goes unchanged - we’ll keep constant with original POST /liquidity/rfq response
    • [Rest of the fields go unchanged]
    • We’ll update quantity to be the new value
    • We’ll refresh the request_id
    • We’ll change the total value to the one provided on the PATCH call

Action Required

  • PATCH /liquidity/rfq is available for platforms leveraging our Platform Direct model. If you need clarification of which model your platform is on, please reach out to your Zero Hash rep.

Endpoints Impacted

  • PATCH /liquidity/rfq

Example Request (zero fees initially)

  • Platform (PLAT01) requests a quote on behalf of its customer (CUST01): POST /liquidity/rfq
  • Let's assume PLAT01 is configured for 5 minute quote expiries
{
    "side": "buy",
    "participant_code": "CUST01",
    "underlying": "BTC",
    "quoted_currency": "USD",
    "total": "1",
    "spread": "300",
    "fees": [
        {
            "amount": "0",
            "name": "fee_1"
        }
    ]
}
  • Zero Hash responds:
{
    "message": {
        "request_id": "7d6d2a79-c421-4e78-b250-5a43b5da479e",
        "participant_code": "PLAT01",
        "quoted_currency": "USD",
        "side": "buy",
        "quantity": "0.00000138",
        "price": "724637.6811594203",
        "quote_id": "38451f54-6289-45b2-b70c-369bdaefdea4",
        "expire_ts": 1717174886754, <-- 5 minute quote
        "account_group": "00SCXM",
        "account_label": "general",
        "obo_participant": {
            "participant_code": "CUST01",
            "account_group": "PLAT01",
            "account_label": "general"
        },
        "fees": [
        {
            "amount": "0.00",
            "name": "fee_1"
        }
                ]
        "underlying": "BTC",
        "asset_cost_notional": "100",
        "spread_notional": "3.00",
        "spread_bps": "300"
    }
}
  • [some time before the quote expires, say 90 seconds later] The Platform updates the quote via PATCH /liquidity/rfq:
{
    "quote_id":"38451f54-6289-45b2-b70c-369bdaefdea4"
    "total": "100",
    "fees": [
        {
            "amount": "10.00",
            "name": "fee_1"
        }
    ]
}
  • Zero Hash responds:
{
    "message": {
        "request_id": "7d6d2a79-c421-4e78-b250-5a43b5da479e",
        "participant_code": "PLAT01",
        "quoted_currency": "USD",
        "side": "buy",
        "quantity": "0.0001242", <-- updated quantity
        "price": "724637.6811594203", <-- same price
        "quote_id": "38451f54-6289-45b2-b70c-369bdaefdea4",
        "expire_ts": 1717174886754, <-- same expiration
        "account_group": "00SCXM",
        "account_label": "general",
        "obo_participant": {
            "participant_code": "CUST01",
            "account_group": "PLAT01",
            "account_label": "general"
        },
        "fees": [
        {
            "amount": "10.00",
            "name": "fee_1"
        }
                ]
        "underlying": "BTC",
        "asset_cost_notional": "100",
        "spread_notional": "3.00",
        "spread_bps": "300"
    }
}
  • Platform executes the quote via POST /liquidity/execute:
{
   "quote_id": "38451f54-6289-45b2-b70c-369bdaefdea4"
}

Release Details

Release Date: June 7th, 2024

Release Type

Informational – Optional action from platforms

Summary

Zero Hash has created a new endpoint: POST /liquidity/rfq. Its fundamental purpose is identical to the existing GET /liquidity/rfq endpoint, however the POST variation allows the submission of fees. Platforms should use the same execution endpoint, POST /liquidity/execute, to execute on the quotes requested via POST /liquidity/rfq.


It's worth calling out this endpoint has 3 additional features compared to its GET counterpart:

  • Custom Spreads: A platform that is configured to do so can specify the spread on each individual order via the spread parameter
  • Transaction Fees: A platform that is configured to do so can specify fees on each individual order via the fees object
  • Per-order quote expiries: A platform can specify the quote length of the order. Acceptable values are:
    • 5 seconds: 5s
    • 30 seconds: 30s
    • 1 minute: 1m
    • 5 minutes: 5m
    • 15 minutes: 15m

Action Required

  • POST /liquidity/rfq is immediately available for all platforms that are configured to use our liquidity endpoints.
  • Your platform must be configured by a Zero Hash employee to use custom spreads and fees, so get in touch with your rep if interested in these features.

Endpoints Impacted

  • POST /liquidity/rfq

Example Request

  • Platform (PLAT01) requests a quote on behalf of its customer (CUST01): POST /liquidity/rfq
{
    "side": "buy",
    "participant_code": "CUST01",
    "underlying": "ETH",
    "quoted_currency": "USD",
    "total": "20",
    "spread": "200",
    "fees": [
        {
            "amount": "2.50",
            "name": "fee_1"
        }
    ]
}
  • Zero Hash responds:
{
    "message": {
        "request_id": "9e910f82-4d23-410f-bebd-a3e6e9d93abb",
        "participant_code": "PLAT01",
        "quoted_currency": "USD",
        "side": "buy",
        "quantity": "0.00451975",
        "price": "3871.8955694452126777",
        "quote_id": "9b31abce-6427-45a0-9086-d861a11cdaa7",
        "expire_ts": 1717780227909,
        "account_group": "00SCXM",
        "account_label": "general",
        "obo_participant": {
            "participant_code": "CUST01",
            "account_group": "PLAT01",
            "account_label": "general"
        },
        "total_notional": "20",
        "underlying": "ETH",
        "asset_cost_notional": "17.5",
        "spread_notional": "0.35",
        "spread_bps": "200",
        "fees": [
            {
                "name": "fee_1",
                "amount": "2.50"
            }
        ]
    }
}
  • Platform executes the quote:
{
    "message": {
        "request_id": "94cfc7fb-162e-4a83-beac-cc8861aaf353",
        "quote": {
            "request_id": "9e910f82-4d23-410f-bebd-a3e6e9d93abb",
            "participant_code": "PLAT01",
            "quoted_currency": "USD",
            "side": "buy",
            "quantity": "0.00451975",
            "price": "3871.8955694452126777",
            "quote_id": "9b31abce-6427-45a0-9086-d861a11cdaa7",
            "expire_ts": 1717780227909,
            "account_group": "00SCXM",
            "account_label": "general",
            "obo_participant": {
                "participant_code": "CUST01",
                "account_group": "PLAT01",
                "account_label": "general"
            },
            "total_notional": "20",
            "underlying": "ETH",
            "asset_cost_notional": "17.5",
            "spread_notional": "0.35",
            "spread_bps": "200",
            "fees": [
                {
                    "name": "fee_1",
                    "amount": "2.50"
                }
            ],
            "transaction_timestamp": 1717780227734
        },
        "trade_id": "9d7fe862-e4a0-4a2e-8d66-26f8b70e3c59",
        "status": "Completed",
        "trade_ids_list": [
            "9d7fe862-e4a0-4a2e-8d66-26f8b70e3c59"
        ]
    }
}

Relevant Documentation

Release Details

Release Date: June 3rd, 2024

Release Type

Informational – Optional action from platforms

Summary

Zero Hash has announced a new feature, Prefunded Transfers. These can be used to fund an end customer's account directly on our ledger. The sole use case is taking funds from a funded float account at Zero Hash and transferring funds to an end customer's account.

Action Required

To initiate a prefunded transfer, use the new boolean field called prefunded on the existing POST /transfers endpoint.

Endpoints Impacted

  • POST /transfers
  • GET /transfers - responses that have "parent_link_id_source": "LINK_SOURCE_PREFUNDED_TRANSFER" indicate that the transfer was a prefunded one.

Relevant Documentation

Release Details

  • Release Date: May 29, 2024

Release Type

Informational – Optional action from platforms

Summary

Zero Hash is pleased to announce support an additional options to send Bitcoin. BTC withdrawals can now be sent either on the L1 or L2 Lightning Network by submitting a valid destination address or invoice.

Note that Lightning Network withdrawals are NOT allowed for New York participants at this time.

Action Required

BTC withdrawals on the Lightning Network testnet are immediately available to all platforms in the certification (CERT) environment.

Please reach out to your Zero Hash team to will enable this functionality for your platform in the production (PROD) environment.

Endpoints Impacted

There are no changes to existing endpoints as a result of this launch, however a Lightning Network invoice will need to be input instead of an L1 destination address.

The asset symbol used for these transactions is still BTC however the destination address format will determine the network used.

Relevant Documentation

Please see the full Lightning Network Testing Guide to enabling withdrawals and additional functionality on this network:

Release Details

  • Release Date: May 28, 2024

Release Type

Informational – Optional action from platforms

Summary

Zero Hash is pleased to announce adding support for the SUI blockchain including the ability to buy, sell, deposit, and withdraw the native SUI token.

Action Required

The SUI token is immediately available in the certification and production environments.

The asset symbol for the native token in both environments is: SUI

Endpoints Impacted

There are no changes to existing endpoints as a result of this launch. Use the new SUI symbol to create or view deposit addresses, initiate a withdrawal, request a quote, or execute a trade.

Relevant Documentation

For a full list of supported assets and instruments, please use the links below.

We are pleased to announce that 4 new assets are available for testing in the Certification environment and 2 in the Production environment.


May 3, 2024 - CERT

The following assets are available in CERT to send, receive, buy, and sell:

  • USD Coin on Base (USDC.BASE)
  • USD Coin on Arbitrum (USDC.ARBITRUM)
  • USD Coin on Op Mainnet (USDC.OPTIMISM)
  • Ethereum on the Base Network (ETH.BASE)

May 7, 2024 - PROD

The following assets are available in PROD to send, receive, buy, and sell:

  • USD Coin on Base (USDC.BASE)
  • Ethereum on Base (ETH.BASE)


Further Reading

To see the full list of supported Assets, please refer to our new documentation pages: