Skip to main content

Quotes API (Market Making)

Submit and manage two-sided quotes for market making.

Required Scope

All write operations require the MARKET_MAKING scope on your API key.

Endpoints

MethodEndpointDescription
POST /api/sdk/quotesSubmit a new quote
GET /api/sdk/quotesList quotes
GET /api/sdk/quotes/:quoteIdGet quote by ID
PATCH /api/sdk/quotes/:quoteIdUpdate a quote
DELETE /api/sdk/quotes/:quoteIdCancel a quote
DELETE /api/sdk/quotesCancel all quotes
PATCH /api/sdk/quotes/batch/updateBulk update quotes

The Quote Object

{
"quoteId": "quote_abc123def456",
"clientQuoteId": "my-quote-001",
"asset": "BTC",
"bidPrice": 49900.00,
"askPrice": 50100.00,
"bidSize": 5.0,
"askSize": 5.0,
"bidFilled": 1.0,
"askFilled": 0,
"status": "active",
"validForSeconds": 30,
"expiresAt": "2024-01-15T10:30:30.000Z",
"metadata": {
"strategy": "market_making"
},
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:30:00.000Z"
}

Attributes

AttributeTypeDescription
quoteIdstringUnique quote identifier
clientQuoteIdstringYour custom identifier (optional)
assetstringAsset symbol
bidPricenumberBid (buy) price
askPricenumberAsk (sell) price
bidSizenumberBid quantity
askSizenumberAsk quantity
bidFillednumberQuantity filled on bid side
askFillednumberQuantity filled on ask side
statusstringQuote status
validForSecondsnumberQuote validity duration
expiresAtstringExpiration timestamp
metadataobjectCustom metadata
createdAtstringISO 8601 timestamp
updatedAtstringISO 8601 timestamp

Quote Statuses

StatusDescription
activeQuote is live and can be filled
partially_filledQuote is partially filled on one or both sides
filledQuote is completely filled
cancelledQuote was cancelled
expiredQuote expired

Submit Quote

Submit a new two-sided quote.

POST /api/sdk/quotes

Required Scope: MARKET_MAKING

Request Body

ParameterTypeRequiredDescription
assetstringYesAsset symbol (e.g., BTC)
bidPricenumberYesBid (buy) price
askPricenumberYesAsk (sell) price
bidSizenumberYesBid quantity
askSizenumberYesAsk quantity
validForSecondsnumberNoValidity duration (1-300, default 30)
clientQuoteIdstringNoYour custom ID (max 64 chars)
metadataobjectNoCustom key-value pairs

Example Request

curl -X POST https://api.zenotc.com/api/sdk/quotes \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature" \
-d '{
"asset": "BTC",
"bidPrice": 49900.00,
"askPrice": 50100.00,
"bidSize": 5.0,
"askSize": 5.0,
"validForSeconds": 30,
"clientQuoteId": "my-quote-001"
}'
quote = api_request("POST", "/api/sdk/quotes", {
"asset": "BTC",
"bidPrice": 49900.00,
"askPrice": 50100.00,
"bidSize": 5.0,
"askSize": 5.0,
"validForSeconds": 30,
"clientQuoteId": "my-quote-001"
})

Response

{
"quoteId": "quote_abc123def456",
"clientQuoteId": "my-quote-001",
"asset": "BTC",
"bidPrice": 49900.00,
"askPrice": 50100.00,
"bidSize": 5.0,
"askSize": 5.0,
"bidFilled": 0,
"askFilled": 0,
"status": "active",
"validForSeconds": 30,
"expiresAt": "2024-01-15T10:30:30.000Z",
"createdAt": "2024-01-15T10:30:00.000Z"
}

Errors

CodeDescription
400Invalid parameters (bid >= ask, negative values, etc.)
403Insufficient scope (requires MARKET_MAKING)
422Risk check failed

List Quotes

Retrieve a list of your quotes.

GET /api/sdk/quotes

Required Scope: READ

Query Parameters

ParameterTypeDefaultDescription
statusstring-Filter: active, expired, filled, cancelled
assetstring-Filter by asset symbol
limitinteger50Results per page (max 100)
offsetinteger0Pagination offset

Example Request

curl -X GET "https://api.zenotc.com/api/sdk/quotes?status=active&asset=BTC" \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature"
quotes = api_request("GET", "/api/sdk/quotes?status=active&asset=BTC")

Response

{
"quotes": [
{
"quoteId": "quote_abc123def456",
"asset": "BTC",
"bidPrice": 49900.00,
"askPrice": 50100.00,
"bidSize": 5.0,
"askSize": 5.0,
"status": "active",
"expiresAt": "2024-01-15T10:30:30.000Z",
"createdAt": "2024-01-15T10:30:00.000Z"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1
}
}

Get Quote

Retrieve a specific quote by ID.

GET /api/sdk/quotes/:quoteId

Required Scope: READ

Path Parameters

ParameterTypeDescription
quoteIdstringThe quote ID

Example Request

curl -X GET https://api.zenotc.com/api/sdk/quotes/quote_abc123def456 \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature"

Response

Returns the Quote object.


Update Quote

Update an active quote's prices or sizes.

PATCH /api/sdk/quotes/:quoteId

Required Scope: MARKET_MAKING

Path Parameters

ParameterTypeDescription
quoteIdstringThe quote ID

Request Body

ParameterTypeRequiredDescription
bidPricenumberNoNew bid price
askPricenumberNoNew ask price
bidSizenumberNoNew bid size
askSizenumberNoNew ask size
validForSecondsnumberNoExtend validity

At least one parameter must be provided.

Example Request

curl -X PATCH https://api.zenotc.com/api/sdk/quotes/quote_abc123def456 \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature" \
-d '{
"bidPrice": 49950.00,
"askPrice": 50050.00,
"validForSeconds": 30
}'
quote = api_request("PATCH", "/api/sdk/quotes/quote_abc123def456", {
"bidPrice": 49950.00,
"askPrice": 50050.00,
"validForSeconds": 30
})

Response

Returns the updated Quote object.


Cancel Quote

Cancel a specific quote.

DELETE /api/sdk/quotes/:quoteId

Required Scope: MARKET_MAKING

Path Parameters

ParameterTypeDescription
quoteIdstringThe quote ID

Example Request

curl -X DELETE https://api.zenotc.com/api/sdk/quotes/quote_abc123def456 \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature"

Response

{
"quoteId": "quote_abc123def456",
"status": "cancelled",
"cancelledAt": "2024-01-15T10:35:00.000Z"
}

Cancel All Quotes

Cancel all active quotes, optionally filtered by asset.

DELETE /api/sdk/quotes

Required Scope: MARKET_MAKING

Request Body

ParameterTypeRequiredDescription
assetstringNoCancel only quotes for this asset

Example Request

curl -X DELETE https://api.zenotc.com/api/sdk/quotes \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature" \
-d '{"asset": "BTC"}'
# Cancel all BTC quotes
result = api_request("DELETE", "/api/sdk/quotes", {"asset": "BTC"})

# Cancel all quotes
result = api_request("DELETE", "/api/sdk/quotes", {})

Response

{
"cancelledCount": 3,
"cancelledQuotes": [
"quote_001",
"quote_002",
"quote_003"
]
}

Bulk Update Quotes

Update multiple quotes in a single request.

PATCH /api/sdk/quotes/batch/update

Required Scope: MARKET_MAKING

Request Body

Array of quote updates:

ParameterTypeRequiredDescription
quoteIdstringYesThe quote ID to update
bidPricenumberNoNew bid price
askPricenumberNoNew ask price
bidSizenumberNoNew bid size
askSizenumberNoNew ask size

Example Request

curl -X PATCH https://api.zenotc.com/api/sdk/quotes/batch/update \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Timestamp: 1705312200000" \
-H "X-API-Signature: your_signature" \
-d '[
{"quoteId": "quote_001", "bidPrice": 49950, "askPrice": 50050},
{"quoteId": "quote_002", "bidSize": 10, "askSize": 10}
]'
result = api_request("PATCH", "/api/sdk/quotes/batch/update", [
{"quoteId": "quote_001", "bidPrice": 49950, "askPrice": 50050},
{"quoteId": "quote_002", "bidSize": 10, "askSize": 10}
])

Response

{
"results": [
{"success": true, "quoteId": "quote_001"},
{"success": true, "quoteId": "quote_002"}
],
"summary": {
"total": 2,
"successful": 2,
"failed": 0
}
}