NAV
typescript

Introduction

Welcome to the Synquote RFQ Rest API for options market makers.

You can use our API specification to receive and respond to RFQs from the end user of our web/mobile apps.

Register as a Market Maker

We have a manual whitelisting process for qualified market makers. You must supply us with:

Market makers will receive requests and are expected to send responses in the format specified below.

Quote Server API

requestQuote

Receive RFQs

The HTTP server hosted by a MM that is responding to RFQs should support POST requests to the /requestQuote interface.

Users of our app send RFQs directly to this endpoint in the format specified below.

HTTP Request

POST https://{REGISTERED_HTTPS_ENDPOINT}/requestQuote

{
  "chain": "arbitrum",
  "market": "ETH",
  "expiry_time": 1648195200,
  "strike_price": 3000,
  "is_call": true,
  "size": 2,
  "direction": "buy",
  "address": "0xc730b0287a66efb14f20e67c68dd809fdc49890d",
  "current_account_health_factor": 3.56,
  "projected_account_health_factor": 2.98
}

Query Parameters

Parameter Type Description
chain string The chain the RFQ is being sent for (e.g. "arbitrum", "polygon")
market string The underlying asset the user wants to trade options on (e.g. "ETH", "BTC")
expiry_time number Expiry time in epoch seconds. This will be at 8AM UTC on the expiry date
strike_price number The strike price of the option
is_call boolean A boolean, true for calls and false for puts.
size number Contract size the user wishes to trade. Our minimum contract size is 1/100th of the underlying asset
direction string Direction the user wants to go, 'buy' if they are long and 'sell' if they are short
address string The address of the user requesting the quote.
current_account_health_factor number The current account health factor of your account. This is the ratio of your account equity to maintenance margin requirement. An account health factor of 2+ is healthy, accounts with a health factor of <=1 can be liquidated.
projected_account_health_factor number The projected account health factor of your account, so that you can preview how filling the trade will affect your account risk status. The projection is made using the deribit mark price.

HTTP Response

Your HTTP server must respond with the following fields.

Response Parameters

{
  "quote_available": true,
  "usd_cost": 138,
  "quote_identifier": 1234
}
Parameter Type Description
quote_available boolean True if the MM has sent a quote, false otherwise. The remaining fields are only required if this is true.
usd_cost number (Optional) The premium at which MM is willing to buy/sell the instrument in the specified size. The maximum precision is 1 cent.
quote_identifier number (Optional) A numerical unique identifier for the quote, can be a randomly generated number

acceptQuote

Sign Quotes

This endpoint is hit when the user accepts the quote, and allows the market maker to indicate whether it is still valid. If the quote is still valid, you supply a signature for the quote details using our signing library.

To sign the quote, you need a signer which can be constructed using your private key.

We recommend issuing quotes that are valid for at least 60 seconds for a good user experience, and monitor expired quote metrics.

Our Websocket API will enable real-time quote streaming.

HTTP Request

POST https://{REGISTERED_HTTPS_ENDPOINT}/acceptQuote

Query Parameters

{
  "quote_identifier": 1234
}
Parameter Type Description
quote_identifier number The identifier of the quote, which was returned in response to /requestQuote

HTTP Response

Response Parameters

Parameter Type Description
quote_available boolean True if the MM has sent a quote, false otherwise. The remaining fields are only required if this is true.
signature string (Optional) An order signed through using our signing library, which takes as parameters the quote details and a signer
settlement_deadline number (Optional) A deadline for the transaction to be settled on chain in epoch seconds.

txConfirmation

HTTP Request

POST https://{REGISTERED_HTTPS_ENDPOINT}/txConfirmation

Query Parameters

{
  "quote_identifier": 1234,
  "transaction_hash": "0xa8218dc38bf5ddb2ca8c51262b4cf306e91aca17e7d3f681aaa51387bab5b9bb"
}
Parameter type Description
quote_identifier number The identifier of the quote, which was returned in response to /requestQuote
transaction_hash string Transaction hash of the TX submitted on-chain

HTTP Response

No response is required from the market maker - the transaction hash is supplied for convenience only.

MMs are not required to support this endpoint in order to respond to RFQs.

listChainsAndMarkets

HTTP Request

GET https://{REGISTERED_HTTPS_ENDPOINT}/listChainsAndMarkets

{
  "arbitrum": ["BTC", "ETH"]
  "polygon": ["ETH"]
}

HTTP Response

The market maker should respond with a JSON object mapping chains (e.g. "polygon", "arbitrum") to markets (e.g. "BTC", "ETH").

The example to the right shows a market maker who wishes to quote BTC+ETH options on Polygon but only ETH on Avalanche.

requestMarkets

HTTP Request

POST https://{REGISTERED_HTTPS_ENDPOINT}/requestMarkets

Query Parameters

{
  "chain": "arbitrum",
  "size": 1
}
Parameter type Description
chain string The chain the sampling request is being sent for (e.g. "arbitrum", "polygon")
size number The size of the sample, currently this is '1' so the server return the cost of 1 contract for each instrument

HTTP Response

The market maker should respond with a JSON object mapping instruments (e.g. "ETH-2SEP22-1600-C") to bids and asks in USD terms with a max precision of one cent (e.g. {"bid" : 12.12, "ask": 14.14})

If only one side is quoted that's fine, and the server can deside which instruments it wants to quote.

To the right is an example response for a server which quotes 3 instruments, 2 on both sides of the market and one sell-side only.

// Example requestMarkets response
{
    "ETH-2SEP22-1600-C": {"bid": 12.12, "ask": 14.14},
    "ETH-2SEP22-1700-C": {"bid": 8.23, "ask": 10.42},
    "ETH-2SEP22-1800-C": {"ask": 7.23},
}

Account Client API

For programmatic access to trade data, we expose HTTP endpoints at https://staging-api.synquote.com/positions/*

account/status

Account Status Endpoint

Make a GET request to /account/status to access the account status endpoint, which returns data pertinent to the account health.

Note that you can set up account health notifications on a particular address via Hal.

GET https://staging-api.synquote.com/account/status?address=0xc730b0287a66efb14f20e67c68dd809fdc49890d&network=arbitrum

HTTP Request

GET https://staging-api.synquote.com/account/status?address=0xc730b0287a66efb14f20e67c68dd809fdc49890d&network=arbitrum

Query Parameters

Parameter Type Description
address string Address of the user for which positions info is requested
network string Name of the network for which positions info is requested

Response Parameters

Parameter Type Description
account_health_factor number Number between 0 and 10 representing the account health factor. An account health factor <=1 means that positions can be liquidated.
maintenance_margin number Number representing the maintenance margin of the account (USDC)
initial_margin number Number representing the initial margin of the account (USDC)
usdc_balance number USDC balance of the account

account/positions/open

Open Positions Endpoint

Make a GET request to /account/positions/open to access the open positions endpoint.

GET https://staging-api.synquote.com/positions/account/positions/open?address=0xc730b0287a66efb14f20e67c68dd809fdc49890d&network=arbitrum

Query Parameters

Parameter Type Description
address string Address of the user for which positions info is requested
network string Name of the network for which positions info is requested
offset number Optional, defaults to 0. Offset of the request to get the next page of items, each page contains up to 1000 results

Response Parameters

Parameter Type Description
instrument_name string Name of the the instrument, in the form ETH-1APR22-3600-C (COIN-EXPIRY-STRIKE-PUT/CALL)
side string LONG or SHORT
size number Size of the position
average_basis number Average basis of the position (total premium/size)

account/positions/settled

Settled Positions Endpoint

Make a GET request to /account/positions/settled to access the open positions endpoint.

GET https://staging-api.synquote.com/account/positions/settled?address=0xc730b0287a66efb14f20e67c68dd809fdc49890d&network=arbitrum

Query Parameters

Parameter Type Description
address string Address of the user for which positions info is requested
network string Name of the network for which positions info is requested
offset number Optional, defaults to 0. Offset of the request to get the next page of items, each page contains up to 1000 results

Response Parameters

Parameter Type Description
instrument_name string Name of the the instrument, for example ETH-1APR22-3600-C (COIN-EXPIRY-STRIKE-PUT/CALL)
side string LONG or SHORT
size number Size of the position
average_basis number Average basis of the position (total premium/size)
settlement_price number Price of the underlying upon which settlement is based
pl number Total P&L for the settled position

account/trades

Trade History Endpoint

Make a GET request to /account/trades to access historical trades.

GET https://staging-api.synquote.com/account/trades?address=0xc730b0287a66efb14f20e67c68dd809fdc49890d&network=arbitrum

HTTP Request

GET https://staging-api.synquote.com/account/trades?address=0xc730b0287a66efb14f20e67c68dd809fdc49890d&network=polygon

Query Parameters

Parameter Type Description
address string Address of the user for which positions info is requested
network string Name of the network for which positions info is requested
offset number Optional, defaults to 0. Offset of the request to get the next page of items, each page contains up to 1000 results

Response Parameters

Parameter Type Description
instrument_name string Name of the the instrument, for example ETH-1APR22-3600-C (COIN-EXPIRY-STRIKE-PUT/CALL)
side string LONG or SHORT
size number Size of the position
basis number Basis for the trade in USD
timestamp number Time the trade was executed in epoch seconds
pnl number Realized PnL of the trade, rounded to the nearest cent. Zero if it is an opening trade.

Listings Client API

For programmatic access to instruments we have displayed in our options chain, we expose an HTTP endpoint at https://staging-api.synquote.com/listings

listings

Listings Endpoint

Make a GET request to /listings to access the set of instruments currently displayed in the options chain in our UI.

This will return the set of instruments that have a live bid or ask.

GET https://staging-api.synquote.com/listings?network=arbitrum&market=ETH

Query Parameters

Parameter Type Description
network string Name of the network for which positions info is requested, for e.g. "arbitrum"
market string The coin for which you are requesting listings, for e.g. "ETH", "BTC"

Response Parameters

The response is an array of instruments. Each instrument currently has the following fields:

Parameter Type Description
instrument_name string Name of the the instrument, in the form ETH-1APR22-3600-C (COIN-EXPIRY-STRIKE-PUT/CALL)

We will be adding more market detials to each instrument returned by the 'listings' endpoint but all changes will be backwards compatible.

Staging Integration

We have a staging environment on Fuji testnet which uses mock USDC & wrapped assets.

It can be used for integration/testing before you start quoting in production with real assets.

Reach out to get set up in staging, include your ETH address to receive faucet USDC, WETH, WBTC.