Skip to content

Fig Markets REST API (1.0)

Below are the available REST API endpoints for Fig Markets REST API

Languages
Servers
Test API

https://api.test.figmarkets.com/v1/

Production API

https://api.figmarkets.com/v1/

Operations
Operations
Operations

Request

Get all RFQs with optional filtering and pagination

Security
BearerAuth and FigSignature and FigTimestamp
Query
startTimeinteger

Return RFQs created at or after this time (unix timestamp in milliseconds)

Example: startTime=1753897938346
endTimeinteger

Return RFQs created at or before this time (unix timestamp in milliseconds)

Example: endTime=1753897938346
cursorstring

The next value from the previous page of results, used to return the next page of results

Example: cursor=351
limitinteger[ 1 .. 1000 ]

Limit the number of results to return per page - default 100, max 1000

Example: limit=10
rolestring

Filter by role - taker (RFQs you raised) or maker (RFQs you were sent, while open, and RFQs you traded as maker)

If omitted, both are returned.

Example: role=taker
baseCurrencystring

Filter by base currency

Example: baseCurrency=BTC
statusstring

Filter by status, as a comma-separated list - open, filled (also matches filledPartial), cancelled, expired

If omitted, only open RFQs that have not yet expired are returned.

Example: status=open,expired
curl -i -X GET \
  https://api.test.figmarkets.com/v1/rfq \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE'

Responses

Paginated list of RFQs

Bodyapplication/json
totalResultsintegerrequired

Number of results matching the filters

On GET /rfq it counts from the current cursor onwards, so it falls as you page.

Example: 3
nextstring

Cursor for the next page of results - pass it as the cursor query parameter

Omitted on the last page

Example: "351"
resultsArray of objectsrequired

Array of results for the current page

rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

productIdinteger(rfq.productId)

Internal FIG ID for the associated product

labelstring(rfq.label)

Your identifier for the RFQ, when one has been set

Only returned to the taker of the RFQ

kindstring(rfq.kind)

Type of RFQ (e.g., option, future)

typestring(rfq.type)

Which flow the RFQ was raised through. Returned by GET /rfq/{id} and on the rfq.maker and rfq.taker channels. Both types are quoted the same way, so no handling difference is required.

Enum"trader""broker"
strategystring(rfq.strategy)

Strategy short name (e.g., IFly, Fut Spd, Collar)

descriptionstring(rfq.description)

FIG generated description of the RFQ

statusstring(rfq.status)

Current status of the RFQ

  • open: accepting quotes
  • filled: traded
  • filledPartial: traded, but only part of the amount settled; filledAmount gives the settled amount
  • cancelled: cancelled by the taker
  • expired: reached expiresAt without trading
  • deleted: deleted by the taker; only sent on the rfq.maker and rfq.taker channels
Enum"open""filled""filledPartial""cancelled""expired""deleted"
baseCurrencystring(rfq.baseCurrency)

Base currency for the trade

quoteCurrencystring(rfq.QuoteCurrency)

The RFQ's quote currency: the entry in quoteCurrencies for the first of DBT, OKX, BULL and DRV that the RFQ offers.

When the RFQ offers DBT it follows the instruments in its legs: the base currency (e.g. BTC, ETH) for inverse options such as BTC-27MAR26-116000-C, USDC for linear options such as BTC_USDC-27MAR26-116000-C, USD for inverse futures and USDC for linear futures.

Each settlementOption can have its own quote currency, listed in quoteCurrencies. For example, an RFQ on inverse BTC options offered on all four settlement options has quoteCurrencies of BTC for DBT and OKX and USDC for BULL and DRV, because BULL and DRV only list BTC_USDC options; its quoteCurrency is BTC. The same RFQ offered only on BULL has a quoteCurrency of USDC.

Quote, leg and trade prices are in the quoteCurrencies entry for the quote's settlementOption, which is not always quoteCurrency.

quoteCurrenciesobject(rfq.quoteCurrencies)

Lists for each settlement option the expected quote currency.

The keys are settlement options and the values are the quote currency codes (e.g. BTC, USDC).

amountnumber(rfq.amount)

Trade amount in base currency units for options and quote currency units for futures

anonymousboolean(rfq.anonymous)

Whether the taker is anonymous

rolestring(common.role)

Your role in the trade, either maker or taker

Enum"taker""maker"
tradeDirectionstring(rfq.tradeDirection)

Your side of the trade (buy or sell): a maker's tradeDirection is the opposite of the taker's

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

Enum"buy""sell"
tradePricenumber(rfq.tradePrice)

Price of the trade, in the quoteCurrencies entry for tradeSettlementOption

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeAmountnumber(rfq.tradeAmount)

Amount traded, in the same units as the RFQ's amount

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeCreatedAtinteger(rfq.tradeCreatedAt)

Timestamp when the trade was executed (unix timestamp in milliseconds)

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeIdinteger(rfq.rfqTradeId)

Unique identifier for the RFQ trade

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeSettlementOptionstring(rfq.tradeSettlementOption)

The settlement option the RFQ traded on - see Settlement options

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

Enum"BULL""DBT""DRV""OKX"
filledAmountnumber(rfq.filledAmount)

The part of the traded amount that settled, in the same units as the RFQ's amount

Only returned for a filled or filledPartial RFQ, if you are the maker or taker in the trade.

legsArray of objects(response.RFQLegArrayResponse)
hedgeobject(rfq.RFQHedge)

The RFQ hedge

settlementCredentialsArray of objects(rfq.settlementCredentialsResult)

The exchange credentials the RFQ settles against

Only returned to the taker, by GET /rfq/{id} and on the rfq.taker channel.

settlementOptionsArray of strings(rfq.settlementOptions)

The settlement options the RFQ accepts.

BULL, DBT, DRV and OKX are supported; OKX only for inverse (coin-settled) products - see Settlement options.

On GET /rfq/{id} and the rfq.maker channel, a maker only sees the settlement options it was invited on.

Items Enum"BULL""DBT""DRV""OKX"
instrumentMapArray of objects(rfq.instrumentMap)

For each leg and hedge instrument, its name on each settlement option, as a list of single-key objects: the key is the instrument name used by the RFQ and the value maps each settlement option to that venue's instrument name.

quotesArray of objects(response.RFQQuoteArrayResponse)

The RFQ's live quotes: all of them if you are the taker, your own if you are a maker

Only returned by GET /rfq, and only while the RFQ is open.

tradesArray of objects(response.RFQTradeArrayResponse)
createdAtinteger(rfq.createdAt)

Timestamp when the RFQ was created (unix timestamp in milliseconds)

publishedAtinteger(rfq.publishedAt)

Timestamp when the RFQ was sent to makers (unix timestamp in milliseconds)

expiresIninteger(rfq.expiresIn)[ 5 .. 1440 ]

How long the RFQ stays open, in minutes, from 5 to 1440 (24 hours)

Defaults to 120 when omitted on creation.

expiresAtinteger(rfq.expiresAt)

Expiration timestamp for the RFQ (unix timestamp in milliseconds)

Response
application/json
{ "totalResults": 3, "next": "351", "results": [ { … } ] }

Request

Create a new RFQ

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

RFQ creation request

baseCurrencystring(rfq.baseCurrency)required

Base currency for the trade

amountnumber(rfq.amount)required

Trade amount in base currency units for options and quote currency units for futures

anonymousboolean(rfq.anonymous)required

Whether the taker is anonymous

settlementOptionsArray of strings(rfq.settlementOptions)required

The settlement options the RFQ accepts.

BULL, DBT, DRV and OKX are supported; OKX only for inverse (coin-settled) products - see Settlement options.

On GET /rfq/{id} and the rfq.maker channel, a maker only sees the settlement options it was invited on.

Items Enum"BULL""DBT""DRV""OKX"
settlementCredentialsobject(rfq.settlementCredentials)required

For each of the provided settlementOptions, a corresponding exchangeCredentialsId must be provided.

The credentials must have read/write access for BlockRFQ and BlockTrade on the settlement venue.

makersobject(rfq.makers)required

For each of the selected settlementOptions, a list of the Fig makers needs to be provided who will be recipients of the RFQ.

The list of available makers can be obtained from the /exchange/maker endpoint.

expiresIninteger(rfq.expiresIn)[ 5 .. 1440 ]

How long the RFQ stays open, in minutes, from 5 to 1440 (24 hours)

Defaults to 120 when omitted on creation.

legsArray of objects(request.RfqLeg)non-emptyrequired

The RFQ's legs, at least one

directionstring(rfq.legPricesDirection)required

Direction for the leg

instrumentNamestring(rfq.legInstrumentName)required

Full instrument name

rationumber(rfq.legPricesRatio)required

Ratio for the leg; must not be 0

pricenumber(rfq.legPrice)

Price for the leg; optional, and a future leg sent without one takes the product's spot price

hedgeobject(request.RfqHedge)
curl -i -X POST \
  https://api.test.figmarkets.com/v1/rfq \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "baseCurrency": "BTC",
    "amount": 1.5,
    "anonymous": false,
    "settlementOptions": [
      "BULL",
      "DBT",
      "DRV",
      "OKX"
    ],
    "settlementCredentials": {
      "BULL": 65,
      "DBT": 57,
      "DRV": 71,
      "OKX": 88
    },
    "makers": {
      "BULL": [
        "TLY"
      ],
      "DBT": [
        "SIS",
        "TE2",
        "TLY"
      ],
      "DRV": [
        "TE2"
      ],
      "OKX": [
        "SIS"
      ]
    },
    "expiresIn": 120,
    "legs": [
      {
        "direction": "buy",
        "instrumentName": "BTC-8AUG25-110000-C",
        "ratio": 1.5,
        "price": 0.08
      }
    ],
    "hedge": {
      "direction": "buy",
      "instrumentName": "BTC-26SEP25",
      "amount": 112534.56,
      "price": 115750.45
    }
  }'

Responses

rfqId of the created RFQ

Bodyapplication/json
rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

Response
application/json
{ "rfqId": 12345 }

Request

Get an RFQ by ID rfqId

Security
BearerAuth and FigSignature and FigTimestamp
Path
idintegerrequired

rfqId of the RFQ to fetch/perform operation on

curl -i -X GET \
  'https://api.test.figmarkets.com/v1/rfq/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE'

Responses

RFQ details

Bodyapplication/json
rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

productIdinteger(rfq.productId)

Internal FIG ID for the associated product

labelstring(rfq.label)

Your identifier for the RFQ, when one has been set

Only returned to the taker of the RFQ

kindstring(rfq.kind)

Type of RFQ (e.g., option, future)

typestring(rfq.type)

Which flow the RFQ was raised through. Returned by GET /rfq/{id} and on the rfq.maker and rfq.taker channels. Both types are quoted the same way, so no handling difference is required.

Enum"trader""broker"
strategystring(rfq.strategy)

Strategy short name (e.g., IFly, Fut Spd, Collar)

descriptionstring(rfq.description)

FIG generated description of the RFQ

statusstring(rfq.status)

Current status of the RFQ

  • open: accepting quotes
  • filled: traded
  • filledPartial: traded, but only part of the amount settled; filledAmount gives the settled amount
  • cancelled: cancelled by the taker
  • expired: reached expiresAt without trading
  • deleted: deleted by the taker; only sent on the rfq.maker and rfq.taker channels
Enum"open""filled""filledPartial""cancelled""expired""deleted"
baseCurrencystring(rfq.baseCurrency)

Base currency for the trade

quoteCurrencystring(rfq.QuoteCurrency)

The RFQ's quote currency: the entry in quoteCurrencies for the first of DBT, OKX, BULL and DRV that the RFQ offers.

When the RFQ offers DBT it follows the instruments in its legs: the base currency (e.g. BTC, ETH) for inverse options such as BTC-27MAR26-116000-C, USDC for linear options such as BTC_USDC-27MAR26-116000-C, USD for inverse futures and USDC for linear futures.

Each settlementOption can have its own quote currency, listed in quoteCurrencies. For example, an RFQ on inverse BTC options offered on all four settlement options has quoteCurrencies of BTC for DBT and OKX and USDC for BULL and DRV, because BULL and DRV only list BTC_USDC options; its quoteCurrency is BTC. The same RFQ offered only on BULL has a quoteCurrency of USDC.

Quote, leg and trade prices are in the quoteCurrencies entry for the quote's settlementOption, which is not always quoteCurrency.

quoteCurrenciesobject(rfq.quoteCurrencies)

Lists for each settlement option the expected quote currency.

The keys are settlement options and the values are the quote currency codes (e.g. BTC, USDC).

amountnumber(rfq.amount)

Trade amount in base currency units for options and quote currency units for futures

anonymousboolean(rfq.anonymous)

Whether the taker is anonymous

rolestring(common.role)

Your role in the trade, either maker or taker

Enum"taker""maker"
tradeDirectionstring(rfq.tradeDirection)

Your side of the trade (buy or sell): a maker's tradeDirection is the opposite of the taker's

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

Enum"buy""sell"
tradePricenumber(rfq.tradePrice)

Price of the trade, in the quoteCurrencies entry for tradeSettlementOption

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeAmountnumber(rfq.tradeAmount)

Amount traded, in the same units as the RFQ's amount

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeCreatedAtinteger(rfq.tradeCreatedAt)

Timestamp when the trade was executed (unix timestamp in milliseconds)

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeIdinteger(rfq.rfqTradeId)

Unique identifier for the RFQ trade

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

tradeSettlementOptionstring(rfq.tradeSettlementOption)

The settlement option the RFQ traded on - see Settlement options

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

Enum"BULL""DBT""DRV""OKX"
filledAmountnumber(rfq.filledAmount)

The part of the traded amount that settled, in the same units as the RFQ's amount

Only returned for a filled or filledPartial RFQ, if you are the maker or taker in the trade.

legsArray of objects(response.RFQLegArrayResponse)
hedgeobject(rfq.RFQHedge)

The RFQ hedge

settlementCredentialsArray of objects(rfq.settlementCredentialsResult)

The exchange credentials the RFQ settles against

Only returned to the taker, by GET /rfq/{id} and on the rfq.taker channel.

settlementOptionsArray of strings(rfq.settlementOptions)

The settlement options the RFQ accepts.

BULL, DBT, DRV and OKX are supported; OKX only for inverse (coin-settled) products - see Settlement options.

On GET /rfq/{id} and the rfq.maker channel, a maker only sees the settlement options it was invited on.

Items Enum"BULL""DBT""DRV""OKX"
instrumentMapArray of objects(rfq.instrumentMap)

For each leg and hedge instrument, its name on each settlement option, as a list of single-key objects: the key is the instrument name used by the RFQ and the value maps each settlement option to that venue's instrument name.

quotesArray of objects(response.RFQQuoteArrayResponse)

The RFQ's live quotes: all of them if you are the taker, your own if you are a maker

Only returned by GET /rfq, and only while the RFQ is open.

tradesArray of objects(response.RFQTradeArrayResponse)
createdAtinteger(rfq.createdAt)

Timestamp when the RFQ was created (unix timestamp in milliseconds)

publishedAtinteger(rfq.publishedAt)

Timestamp when the RFQ was sent to makers (unix timestamp in milliseconds)

expiresIninteger(rfq.expiresIn)[ 5 .. 1440 ]

How long the RFQ stays open, in minutes, from 5 to 1440 (24 hours)

Defaults to 120 when omitted on creation.

expiresAtinteger(rfq.expiresAt)

Expiration timestamp for the RFQ (unix timestamp in milliseconds)

Response
application/json
{ "rfqId": 12345, "productId": 67890, "label": "MyRFQ-12345", "kind": "option", "type": "trader", "strategy": "RR", "description": "20Aug25 4200/4300/4400 CFly 1:2:1 (Wings+)", "status": "open", "baseCurrency": "BTC", "quoteCurrency": "BTC", "quoteCurrencies": { "BULL": "USDC", "DBT": "BTC", "DRV": "USDC", "OKX": "BTC" }, "amount": 1.5, "anonymous": false, "role": "taker", "tradeDirection": "buy", "tradePrice": 0.02, "tradeAmount": 25, "tradeCreatedAt": 1756802862567, "tradeId": 12345, "tradeSettlementOption": "DBT", "filledAmount": 25, "legs": [ { … } ], "hedge": { "amount": 112534.56, "direction": "buy", "expiry": "26Sep25", "instrumentId": 12345, "instrumentName": "BTC-26SEP25", "price": 115750.45 }, "settlementCredentials": [ { … } ], "settlementOptions": [ "BULL", "DBT", "DRV", "OKX" ], "instrumentMap": [ { … } ], "quotes": [ { … } ], "trades": [ { … } ], "createdAt": 1756802862567, "publishedAt": 1757871888038, "expiresIn": 120, "expiresAt": 1756803162567 }

Request

Delete one of your RFQs.

Only a cancelled or expired RFQ can be deleted; cancel an open RFQ first.

Security
BearerAuth and FigSignature and FigTimestamp
Path
idintegerrequired

rfqId of the RFQ to fetch/perform operation on

curl -i -X DELETE \
  'https://api.test.figmarkets.com/v1/rfq/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE'

Responses

The RFQ was deleted

Bodyapplication/json
messagestring
Response
application/json
{ "message": "RFQ deleted successfully" }

Request

Get the live quotes on one of your RFQs, as its taker

Security
BearerAuth and FigSignature and FigTimestamp
Path
idintegerrequired

rfqId of the RFQ to fetch/perform operation on

curl -i -X GET \
  'https://api.test.figmarkets.com/v1/rfq/{id}/quote' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE'

Responses

The RFQ's quotes, split into bids and asks

Bodyapplication/json
rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

bidsArray of objects(response.RFQQuoteAsTakerResponse)

Bid quotes

asksArray of objects(response.RFQQuoteAsTakerResponse)

Ask quotes

Response
application/json
{ "rfqId": 12345, "bids": [ { … } ], "asks": [ { … } ] }

Request

Cancel an existing RFQ using the RFQ's ID rfqId

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

RFQ cancellation request

rfqIdinteger(rfq.rfqId)required

Unique identifier for the RFQ

curl -i -X POST \
  https://api.test.figmarkets.com/v1/rfq/cancel \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqId": 12345
  }'

Responses

ID of the cancelled RFQ

Bodyapplication/json
idinteger(account.id)
Response
application/json
{ "id": 123 }

Request

Accept a quote and trade the RFQ

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

RFQ trade request

rfqQuoteIdinteger(rfq.rfqQuoteId)required

The rfqQuoteId of the quote to accept and trade against

curl -i -X POST \
  https://api.test.figmarkets.com/v1/rfq/trade \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqQuoteId": 12345
  }'

Responses

Details of the completed trade

Bodyapplication/json
rfqTradeIdinteger(rfq.rfqTradeId)

Unique identifier for the RFQ trade

Only returned if the RFQ has been traded and you are the maker or taker in the trade.

Example: 12345
rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

Example: 12345
tradesArray of objects(response.RFQTradeArrayResponse)
Response
application/json
{ "rfqTradeId": 12345, "rfqId": 12345, "trades": [ { … } ] }

Request

Get the live quotes on open RFQs: your own quotes, and other makers' quotes on RFQs you raised.

Quotes on RFQs that are no longer open are not returned.

Security
BearerAuth and FigSignature and FigTimestamp
Query
rfqIdinteger

Filter by RFQ ID

Example: rfqId=12345
startTimeinteger

Return quotes created at or after this time (unix timestamp in milliseconds)

Example: startTime=1753897938346
endTimeinteger

Return quotes created at or before this time (unix timestamp in milliseconds)

Example: endTime=1753897938346
cursorstring

The next value from the previous page of results, used to return the next page of results

Example: cursor=351
limitinteger[ 1 .. 1000 ]

Limit the number of results to return per page - default 100, max 1000

Example: limit=10
curl -i -X GET \
  https://api.test.figmarkets.com/v1/rfq/quote \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE'

Responses

Paginated list of quotes

Bodyapplication/json
totalResultsintegerrequired

Number of results matching the filters

On GET /rfq it counts from the current cursor onwards, so it falls as you page.

Example: 3
nextstring

Cursor for the next page of results - pass it as the cursor query parameter

Omitted on the last page

Example: "351"
resultsArray of objectsrequired

Array of results for the current page

rfqQuoteIdinteger(rfq.rfqQuoteId)

Unique identifier for the RFQ quote

rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

labelstring(rfqQuote.Label)

A custom label to assign to the quote

directionstring(common.direction)

Direction of the trade/leg/quote (buy or sell)

Enum"buy""sell"
pricenumber(rfqQuote.Price)

Price offered for the quote in the respective quote currency for the settlementOption as defined by the quoteCurrencies property for the RFQ.

amountnumber(rfqQuote.Amount)

The amount of asset being quoted for

settlementOptionstring(rfqQuote.settlementOption)

The chosen settlement option for the quote.

BULL, DBT, DRV and OKX are supported - see Settlement options.

You can only send a value that matches one of the available settlementOptions for the RFQ.

Enum"BULL""DBT""DRV""OKX"
settlementCredentialsinteger(rfqQuote.settlementCredentials)

The exchangeCredentialsId of the exchange credentials to use for the settlement of the trade for the chosen settlementOption.

The credentials must be for the same exchange defined in settlementOption.

Your credentials must have read/write access for BlockRFQ and BlockTrade on the settlement venue.

quoteCurrencystring(rfqQuote.quoteCurrency)

The quote currency for the quote, as determined by the chosen settlementOption and the RFQ's quoteCurrencies mapping.

This is the currency in which the quote price is denominated.

makersArray of strings(rfqQuote.takerMakers)

The makers who sent the quote, or ["ANONYMOUS"] when the RFQ is anonymous

legsArray of objects(response.RFQQuoteLegArrayResponse)

The breakdown of the quote against each leg

Only included for quotes received via FIG directly. Quotes from third party exchanges do not include the breakdown.

hedgeobject(response.RFQQuoteLegArrayResponse)

The hedge for the quote, only included when the RFQ has a hedge

Only included for quotes received via FIG directly. Quotes from third party exchanges do not include the hedge.

createdAtinteger(rfqQuote.CreatedAt)

Timestamp when the quote was created (unix timestamp in milliseconds)

Response
application/json
{ "totalResults": 3, "next": "351", "results": [ { … } ] }

Request

Create a new quote against an existing RFQ.

The RFQ must be in the open state, and legs must give a price for each of the RFQ's legs, matched by instrumentName.

You don't send a hedge. If the RFQ has one, the quote takes the RFQ's hedge at the RFQ's hedge price.

  • Prices are in the quoteCurrencies entry for your settlementOption.
  • amount can be less than the RFQ's amount (a partial quote) but not more.
  • You can have one live quote per RFQ, direction and settlement option.
  • A label must be unique across your live quotes on open RFQs.

You can use the Calculate leg prices endpoint to help you get the leg prices for your quote.

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

Quote creation request

rfqIdinteger(rfq.rfqId)required

Unique identifier for the RFQ

labelstring(rfqQuote.Label)

A custom label to assign to the quote

amountnumber(rfqQuote.Amount)required

The amount of asset being quoted for

directionstring(rfqQuote.Direction)required

The direction of the quote; either "buy" or "sell"

settlementOptionstring(rfqQuote.settlementOption)required

The chosen settlement option for the quote.

BULL, DBT, DRV and OKX are supported - see Settlement options.

You can only send a value that matches one of the available settlementOptions for the RFQ.

Enum"BULL""DBT""DRV""OKX"
settlementCredentialsinteger(rfqQuote.settlementCredentials)required

The exchangeCredentialsId of the exchange credentials to use for the settlement of the trade for the chosen settlementOption.

The credentials must be for the same exchange defined in settlementOption.

Your credentials must have read/write access for BlockRFQ and BlockTrade on the settlement venue.

legsArray of objects(request.RFQQuoteRequestLeg)required

Array of legs; the breakdown of the quote price across each of the RFQ's legs

instrumentNamestring(rfq.legInstrumentName)required

Full instrument name

Example: "BTC-8AUG25-110000-C"
pricenumber(rfq.legPrice)required

Your price for the individual leg, in the quoteCurrencies entry for the quote's settlementOption

Example: 0.02
curl -i -X POST \
  https://api.test.figmarkets.com/v1/rfq/quote \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqId": 12345,
    "label": "Quote-1234",
    "amount": 1.5,
    "direction": "buy",
    "settlementOption": "DBT",
    "settlementCredentials": 57,
    "legs": [
      {
        "instrumentName": "BTC-8AUG25-110000-C",
        "price": 0.08
      }
    ]
  }'

Responses

rfqQuoteId of the created quote

Bodyapplication/json
rfqQuoteIdinteger(rfq.rfqQuoteId)

Unique identifier for the RFQ quote

Response
application/json
{ "rfqQuoteId": 12345 }

Request

Update an existing quote

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

Quote update request. Either rfqQuoteId or label must be provided to identify the quote to update.

rfqQuoteIdinteger(rfq.rfqQuoteId)

Unique identifier for the RFQ quote

labelstring(rfqQuote.Label)

A custom label to assign to the quote

amountnumber(rfqQuote.Amount)required

The amount of asset being quoted for

legsArray of objects(request.RFQQuoteRequestLeg)required

Array of legs; the breakdown of the quote price across each of the RFQ's legs

instrumentNamestring(rfq.legInstrumentName)required

Full instrument name

Example: "BTC-8AUG25-110000-C"
pricenumber(rfq.legPrice)required

Your price for the individual leg, in the quoteCurrencies entry for the quote's settlementOption

Example: 0.02
settlementCredentialsinteger(rfqQuote.settlementCredentials)required

The exchangeCredentialsId of the exchange credentials to use for the settlement of the trade for the chosen settlementOption.

The credentials must be for the same exchange defined in settlementOption.

Your credentials must have read/write access for BlockRFQ and BlockTrade on the settlement venue.

settlementOptionstring(rfqQuote.settlementOption)required

The chosen settlement option for the quote.

BULL, DBT, DRV and OKX are supported - see Settlement options.

You can only send a value that matches one of the available settlementOptions for the RFQ.

Enum"BULL""DBT""DRV""OKX"
curl -i -X PUT \
  https://api.test.figmarkets.com/v1/rfq/quote \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqQuoteId": 12345,
    "label": "Quote-1234",
    "amount": 1.5,
    "legs": [
      {
        "instrumentName": "BTC-8AUG25-110000-C",
        "price": 0.08
      }
    ],
    "settlementCredentials": 57,
    "settlementOption": "DBT"
  }'

Responses

Updated quote details

Bodyapplication/json
rfqQuoteIdinteger(rfq.rfqQuoteId)

Unique identifier for the RFQ quote

rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

labelstring(rfqQuote.Label)

A custom label to assign to the quote

directionstring(common.direction)

Direction of the trade/leg/quote (buy or sell)

Enum"buy""sell"
pricenumber(rfqQuote.Price)

Price offered for the quote in the respective quote currency for the settlementOption as defined by the quoteCurrencies property for the RFQ.

Response
application/json
{ "rfqQuoteId": 12345, "rfqId": 12345, "label": "Quote-1234", "direction": "buy", "price": 0.02 }

Request

Delete one of your quotes.

Identify it by its rfqQuoteId, the label you gave it, or the rfqId of the RFQ it is on (refused if you have more than one quote on that RFQ).

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired
rfqQuoteIdinteger(rfq.rfqQuoteId)

Unique identifier for the RFQ quote

labelstring(rfqQuote.Label)

A custom label to assign to the quote

rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

curl -i -X DELETE \
  https://api.test.figmarkets.com/v1/rfq/quote \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqQuoteId": 12345,
    "label": "Quote-1234",
    "rfqId": 12345
  }'

Responses

Quote deleted successfully

Bodyapplication/json
messagestring
Example: "Quote deleted successfully"
Response
application/json
{ "message": "Quote deleted successfully" }

Request

Cancel all your live quotes, across every user and API key of your entity.

If rfqId is provided, only quotes for that RFQ are cancelled. If baseCurrency is provided, only quotes on RFQs with that base currency are cancelled. If both are provided, both must match. If neither is provided, all your live quotes are cancelled.

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

Cancel all quotes request

rfqIdinteger(rfq.rfqId)

Unique identifier for the RFQ

baseCurrencystring

If provided, only quotes linked to an RFQ with this base currency will be cancelled.

Example: "BTC"
curl -i -X POST \
  https://api.test.figmarkets.com/v1/rfq/quote/cancel-all \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqId": 12345,
    "baseCurrency": "BTC"
  }'

Responses

Quotes cancelled successfully

Bodyapplication/json
messagestring
Example: "Open quotes have been cancelled"
cancelledCountinteger

The number of quotes that were cancelled.

Example: 3
Response
application/json
{ "message": "Open quotes have been cancelled", "cancelledCount": 3 }

Request

Split a strategy price into a price for each leg of an RFQ, for use in a quote's legs.

Pass quoteCurrency to get prices in the currency of the settlement option you will quote on.

Security
BearerAuth and FigSignature and FigTimestamp
Bodyapplication/jsonrequired

Leg prices calculation request

rfqIdinteger(rfq.rfqId)required

Unique identifier for the RFQ

pricenumber(common.price)required

The total price for the strategy

quoteCurrencystring

The currency to price in: the quoteCurrencies entry for the settlement option you will quote on, e.g. USDC to quote BULL or DRV on an RFQ for inverse options

Defaults to the quote currency of the first leg's instrument.

Example: "USDC"
legsArray of objects(request.LegPricesRequestLeg)required

The strategy legs to calculate the leg prices for

directionstring(rfq.legPricesDirection)required

Direction for the leg

Enum"buy""sell"
Example: "buy"
instrumentNamestring(rfq.legInstrumentName)required

Full instrument name

Example: "BTC-8AUG25-110000-C"
rationumber(rfq.legPricesRatio)required

Ratio for the leg; must not be 0

Example: 1
curl -i -X POST \
  https://api.test.figmarkets.com/v1/rfq/calculate-leg-prices \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-FIG-Signature: YOUR_API_KEY_HERE' \
  -H 'X-FIG-Timestamp: YOUR_API_KEY_HERE' \
  -d '{
    "rfqId": 12345,
    "price": 0.026,
    "quoteCurrency": "USDC",
    "legs": [
      {
        "direction": "buy",
        "instrumentName": "BTC-8AUG25-110000-C",
        "ratio": 1.5
      }
    ]
  }'

Responses

Leg prices calculation result

Bodyapplication/json
legsArray of objects(response.LegPricesResponseLeg)
Response
application/json
{ "legs": [ { … } ] }