Skip to main content

Markets

Supported markets, and indicative pricing. GET /v2/markets/{market}/price is a NON-BINDING price: nothing is reserved, it has no expiry and it carries no order id, so it cannot be executed. It is the read-only counterpart to the Orders tag’s POST /v2/quotes.

GET /v2/markets​

List supported markets

Reference data, identical for every key. A market id is BASE-QUOTE and is what POST /v2/quotes and GET /v2/markets/{market}/price take. Being listed here means the pair is tradable, not that it is currently quotable — a quote can still be refused for an amount outside the market's limits.

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). For a tokenised equity the rebased spelling also resolves — NVDAX-CLP returns NVDASPV-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.

Either spelling of a tokenised equity works, in market and in amountAsset alike — NVDAX-CLP with amountAsset=NVDAX prices the same ticket as NVDASPV-CLP with amountAsset=NVDASPV. The representation of amount is set by assetFormat, never by which spelling you used.

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.
assetFormatquerybase | rebasednoHow to express tokenised-equity (xStock) amounts — BOTH the amount you send and the amounts and rate you get back. rebased (default) = underlying equity (real shares); base = settled SPV tokens. No effect on other assets. market is unaffected either way: a market id names an instrument pair, not a quantity, and is spelled the same in both.

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.
rebasedBaseAssetstringThe REBASED ticker for the base leg — the name a holder recognises. NVDAX where baseAsset is NVDASPV, and the same value as baseAsset for everything else. ⚠️ Display only: baseAsset is the code GET /v2/assets is keyed by, and id keeps the settled spelling because a market id never rebases. 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.

PriceBaseRepresentation​

FieldTypeDescription
ratestringRate in settled units — quote asset per SETTLED base unit. Moves INVERSELY to the base amount under a rebase: the base leg divides going back to settled, so the rate multiplies. e.g. 59700000.
baseAmountstringBase-asset amount in settled units. Subject to the last-place caveat above — converts rounds to 8dp upstream, so treat this as indicative, like the price itself. e.g. 0.2.
quoteAmountstringQuote-asset amount. Never rebases — an xStock market quotes in fiat or a stablecoin — so this always equals the top-level quoteAmount. e.g. 11940000.

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.
assetFormatbase | rebasedWhich representation baseAmount and rate above are in — the value you asked for, or the default. Always present, so a client never has to infer the units it was given. quoteAmount is unaffected: an xStock market quotes in fiat or a stablecoin, which does not rebase.
multiplierstringThis market's base-leg rebase factor as it stands NOW, published whether or not it was applied. "1" when the base asset does not rebase. It is NOT stamped on anything — a price is a calculation, not a record — so an order placed later carries the factor in force at ITS creation, which may differ. e.g. 1.
basePriceBaseRepresentationThe same price in SETTLED units. Present in BOTH representations, so a client comparing an indicative price against a ledger entry or an existing position never has to re-request it. On a base read it repeats the figures above rather than disappearing. Indicative, like everything else on this resource — see the schema notes for the last-place rounding caveat that applies here and not to POST /v2/quotes.

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.