Skip to main content

Markets

GET /v2/markets

List supported markets

Parameters

ParameterInTypeRequiredDescription
pagequeryintegernoDefault: 1.
limitqueryintegernoDefault: 25.

Responses

CodeDescriptionBody
200Success.data: MarketResource[] · pagination: PaginationMeta
401application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable).
403application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable).
429application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable).
500application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable).
502application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable).
503application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable).

GET /v2/markets/{market}

Get a supported market by id

The id is the market code returned by GET /v2/markets (e.g. BTC-CLP). Reference data is identical for every key, so this response does not depend on who asks.

Parameters

ParameterInTypeRequiredDescription
marketpathstringyes

Responses

CodeDescriptionBody
200Success.MarketResource
401application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable).
403application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable).
404application/problem+json (RFC 9457) — branch on code, not on the status: not_found (not retryable).
429application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable).
500application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable).
502application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable).
503application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable).

GET /v2/markets/{market}/price

Get an indicative price for a market

A NON-BINDING price. Nothing is reserved and there is no expiry — the response carries no order id, so it cannot be executed. To obtain a confirmable quote use POST /v2/quotes (scope trading:write), then execute it with a signed POST /v2/orders.

Skipo prices a dealer spread, so the rate depends on size: pass amount + amountAsset to price a specific ticket, or omit both to price at the market minimum. amount is capped by that asset’s maxIndicativeQuoteAmount (see GET /v2/assets); above the cap the request is rejected rather than silently repriced at a smaller size.

Parameters

ParameterInTypeRequiredDescription
marketpathstringyes
sidequeryBUY | SELLyesWhich direction to price. Required — buying and selling the same market are different prices, so there is no sensible default.
amountquerystringnoAmount to price, denominated in amountAsset. A decimal string. Requires amountAsset. Omit both to price at the market minimum. Capped by the maxIndicativeQuoteAmount of amountAsset from GET /v2/assets — an amount above the cap is rejected rather than silently reduced, because a price for an amount you did not ask for is worse than an error.
amountAssetquerystringnoWhich leg amount is denominated in — must be one of the market's two assets. Requires amount.

Responses

CodeDescriptionBody
200Success.PriceResource
401application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable).
403application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable).
404application/problem+json (RFC 9457) — branch on code, not on the status: not_found (not retryable).
429application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable).
500application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable).
502application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable).
503application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable).

Schemas

MarketResource

FieldTypeDescription
idstringe.g. BTC-CLP.
baseAssetstringBase asset code. Matches a GET /v2/assets assetSymbol. e.g. BTC.
quoteAssetstringQuote asset code. Matches a GET /v2/assets assetSymbol. e.g. CLP.
typeCRYPTO-CRYPTO | CRYPTO-FIAT | FIAT-FIATThe asset classes this market pairs. It does NOT identify a tokenised-equity market — those are typed CRYPTO-FIAT too. Read assetClass on the asset for that. e.g. CRYPTO-FIAT.
minBaseAmountstringSmallest amount you may request when you denominate the trade in the BASE asset. Identical for BUY and SELL. e.g. 0.0001.
minQuoteAmountstringSmallest amount you may request when you denominate the trade in the QUOTE asset. Identical for BUY and SELL. e.g. 1000.
baseIncrementstringAmount step on the BASE leg. A finer amount is truncated, not rejected. Equivalent to Coinbase's base_increment and Binance's stepSize. e.g. 0.00000001.
quoteIncrementstringAmount step on the QUOTE leg — e.g. "1" on a CLP market, which settles in whole pesos. Equivalent to Coinbase's quote_increment. e.g. 1.
tradingDaysnumber[] | nullDays of the week this market trades, as ISO weekday numbers (1 = Monday … 7 = Sunday), evaluated in UTC. null means it trades every day — which is the case for every crypto-only market. Tokenised-equity markets trade Monday to Friday. e.g. 1,2,3,4,5.

PaginationMeta

FieldTypeDescription
pagenumbere.g. 1.
limitnumbere.g. 25.
totalItemsnumbere.g. 100.
totalPagesnumbere.g. 4.

PriceResource

FieldTypeDescription
marketstringThe market this price is for, echoed from the request path. e.g. BTC-CLP.
sideBUY | SELLThe side priced. Buying and selling the same market are different prices — the spread is real — so a price is only meaningful together with its side. e.g. BUY.
ratestringQuote asset per one unit of base asset. A decimal string. This is the rate for baseAmount specifically: Skipo prices a dealer spread, so the rate is a function of size and does NOT scale linearly to a larger amount. e.g. 59700000.
baseAmountstringBase-asset amount this price was calculated for. When the request omitted amount, this is the market's minimum — not a limit-free rate. e.g. 0.2.
quoteAmountstringQuote-asset amount corresponding to baseAmount at rate. e.g. 11940000.
indicativebooleanAlways true. Present so a client never has to infer non-bindingness from missing fields. This price is not reserved, not held, and cannot be executed — obtaining a confirmable quote is POST /v2/quotes, which requires the trading:write scope. e.g. true.
pricedAtstringWhen Skipo calculated this price, ISO-8601. There is no expiry because there is nothing to expire; treat the price as a point-in-time observation and re-read it when it matters. e.g. 2026-07-30T04:36:02.451Z.

Problem

FieldTypeDescription
typestringStable problem-type URI. Resolves to docs for this error. e.g. https://docs.skipo.com/errors/rate_limited.
titlestringShort, human-readable summary (stable, English). e.g. Rate limit exceeded.
statusnumberHTTP status code. e.g. 429.
codestringStable machine-readable error code (equals the last path segment of type). e.g. rate_limited.
retryablebooleanWhether retrying the identical request may succeed. e.g. true.
detail (optional)stringHuman-readable, possibly localized detail.
instance (optional)stringThe request path that produced the error.
traceId (optional)stringTrace id — joins BigQuery api_request and Cloud Logging.

Back to the endpoint reference. See also: Pagination · Errors · Ids and correlation.