Saltar al contenido principal

Orders

Quotes, orders and fills. POST /v2/quotes mints a short-lived, single-use CONFIRMABLE quote (scope trading:write) which POST /v2/orders then executes as a Tier-2 signed request. An order is filled by one or more fills. For a non-binding price with no confirmation step, use GET /v2/markets/{market}/price instead.

GET /v2/fills

List fills

Every fill on the account, newest first, across all orders. Filter by orderId, market, asset (either leg), side or date range. Cursor-paginated: follow pagination.nextCursor until it is null, and do not infer the end from a short page.

Parámetros

ParámetroEnTipoRequeridoDescripción
limitqueryintegernoDefault: 25.
cursorquerystringnoOpaque cursor from the previous page's pagination.nextCursor.
orderIdquerystringnoRestrict to the fills of one order (its public id).
marketquerystringnoFilter to one market, by the id published by GET /v2/markets — the same value this endpoint returns as market.
assetSymbolquerystringnoMatches either leg — fills that touched this asset.
sidequeryBUY | SELLno
startDatequerystringnoISO-8601 start date (inclusive).
endDatequerystringnoISO-8601 end date (exclusive).
assetFormatqueryAssetFormatnoHow to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity (real shares); base = settled SPV tokens, i.e. what moved on chain and in the ledger. No effect on other assets.

Respuestas

CódigoDescripciónCuerpo
200Éxito.data: FillResource[] · pagination: CursorMeta
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/orders

List orders

One order per confirmed quote. An order is completed by one or more fills, so filledBaseAmount/filledQuoteAmount are the running totals and only equal the requested amounts once status is FILLED. An on-credit order (onCredit: true) fills over time as the debt is paid down.

For a tokenised equity only the BASE leg rebases — the quote leg is unaffected and rate moves inversely — so the field-by-field relation that holds on a deposit does NOT hold here. Compare against the base block rather than deriving it.

Parámetros

ParámetroEnTipoRequeridoDescripción
pagequeryintegernoDefault: 1.
limitqueryintegernoDefault: 25.
statusqueryNEW | PARTIALLY_FILLED | FILLED | FAILEDno
baseAssetquerystringnoFilter by base asset code.
quoteAssetquerystringnoFilter by quote asset code.
marketquerystringnoFilter to one market, by the id published by GET /v2/markets — the same value this endpoint returns as market.
sidequeryBUY | SELLno
assetFormatqueryAssetFormatnoHow to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity; base = settled SPV tokens. No effect on other assets.
startDatequerystringnoISO-8601 start date.
endDatequerystringnoISO-8601 end date.

Respuestas

CódigoDescripciónCuerpo
200Éxito.data: OrderResource[] · 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).

POST /v2/orders

Place an order (execute a quote)

Money movement — requires a Tier-2 signed request (X-API-Key header + signed Authorization JWT), not a bare bearer key. Executes the quote identified by orderId. Returns 201 Created with status: "FILLED" when the balance move is booked, or 202 Accepted with status: "PROCESSING" when the trade executed but the balance credit/debit is still being reconciled internally. On 202 the order is accepted — poll GET /v2/orders/{id} for the final state and do NOT retry (a retry places a new order and double-executes).

Autenticación: Petición firmada (Tier-2)

Cuerpo de la peticiónPlaceOrderDto

Respuestas

CódigoDescripciónCuerpo
201Order placed and filled — the balance move is booked (status: "filled").PlacedOrderResource
202Order accepted; settlement is pending (status: "PROCESSING"). The trade executed but the balance move is still reconciling internally — poll GET /v2/orders/{id}; do NOT retry.PlacedOrderResource
400application/problem+json (RFC 9457) — branch on code, not on the status: validation_error (not retryable).
401application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable), invalid_signature (not retryable), clock_skew (retryable), nonce_reused (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), two_factor_required (not retryable).
422application/problem+json (RFC 9457) — branch on code, not on the status: unprocessable (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/orders/{id}

Get an order by id

Takes the id returned by POST /v2/orders (the client order id). Use GET /v2/orders/{id}/fills for the individual executions behind the running totals here.

Parámetros

ParámetroEnTipoRequeridoDescripción
idpathstring
assetFormatqueryAssetFormatnoHow to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity (real shares); base = settled SPV tokens, i.e. what moved on chain and in the ledger. No effect on other assets.

Respuestas

CódigoDescripciónCuerpo
200Éxito.OrderResource
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/orders/{id}/fills

List the fills of an order

The fills of one order, newest first. Cursor-paginated: follow pagination.nextCursor until it is null. A normal convert has exactly one fill; an on-credit (capacity) order is filled by several as the debt is paid down.

Parámetros

ParámetroEnTipoRequeridoDescripción
idpathstring
limitqueryintegernoDefault: 25.
cursorquerystringnoOpaque cursor from the previous page's pagination.nextCursor.
assetFormatqueryAssetFormatnoHow to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity (real shares); base = settled SPV tokens, i.e. what moved on chain and in the ledger. No effect on other assets.

Respuestas

CódigoDescripciónCuerpo
200Éxito.data: FillResource[] · pagination: CursorMeta
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).

POST /v2/quotes

Create a conversion quote

Creates a short-lived, single-use CONFIRMABLE quote; execute it via POST /v2/orders (a signed request). Requires the write scope because the call mints server-side state that an order later consumes, and is balance- and capacity-gated — not because funds move here. It is bearer-authenticated rather than signed precisely because the quote itself moves no money. For a NON-BINDING price with no confirmation step and no write scope, use GET /v2/markets/{market}/price.

Cuerpo de la peticiónCreateQuoteDto

Respuestas

CódigoDescripciónCuerpo
201Creado.QuoteResource
400application/problem+json (RFC 9457) — branch on code, not on the status: validation_error (not retryable).
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).
422application/problem+json (RFC 9457) — branch on code, not on the status: unprocessable (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).

Esquemas

CreateQuoteDto

CampoTipoDescripción
baseAssetstringBase asset code of the market. Together with quoteAsset it must name a market GET /v2/markets lists — the pairing is its id, and it is DIRECTIONAL, so the legs cannot be swapped. An unknown pairing is rejected before anything is priced. For a tokenised equity either spelling works: NVDAX names the same market as NVDASPV. Ej.: BTC.
quoteAssetstringQuote asset code of the market. Ej.: CLP.
amountAssetstringWhich leg amount is denominated in — it must be baseAsset or quoteAsset, and anything else is rejected. It selects which minimum applies: minBaseAmount or minQuoteAmount on GET /v2/markets. Either spelling of a tokenised equity is accepted, and it names the leg ONLY — see assetFormat for what sets the units. Ej.: BTC.
sideBUY | SELL
amountstringAmount to convert, denominated in amountAsset. A decimal string. Ej.: 0.5.
assetFormat (opcional)anyHow to express tokenised-equity (xStock) amounts — BOTH the amount above and the amounts and rate in the response. rebased (default) = underlying equity (real shares); base = settled SPV tokens, i.e. what moves on chain and in the ledger. 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. ⚠️ This field is the ONLY thing that decides units. Either spelling of a tokenised equity is accepted in baseAsset, quoteAsset and amountAssetNVDAX and NVDASPV name the same asset — and which one you use does NOT change how amount is read. Sending amountAsset: "NFLXX" with assetFormat: "base" prices settled tokens, because you asked for base. A symbol is a name; the representation is this field.

CursorMeta

CampoTipoDescripción
countnumberNumber of items in THIS page. Ej.: 25.
nextCursorstring | nullOpaque token for the next page, or null on the last page. Pass it back as cursor. Treat it as opaque — its encoding is not part of the contract and may change. Ej.: MjAyNi0wNy0yNiAxNzo0MjowMS4wMDMzMDl8OWY4Zi00YQ.

FillBaseOrderState

CampoTipoDescripción
filledBaseAmountstringCumulative filled base amount on the order, in settled units.
filledQuoteAmountstringCumulative filled quote amount. Unscaled, so identical to the top level.

FillBaseRepresentation

CampoTipoDescripción
baseAssetstringSettled base asset — the SPV code for a tokenised equity, the ordinary code otherwise. Ej.: BTC.
quoteAssetstringQuote asset. Never rebases, so it always equals the top-level quoteAsset. Ej.: CLP.
baseAmountstringBase amount filled by this fill, in settled units — what actually moved on chain and in the ledger.
quoteAmountstringQuote amount. Unscaled, so identical to the top level.
ratestringRate in settled units — quote per SETTLED base unit.
orderFillBaseOrderState

FillOrderState

CampoTipoDescripción
statusNEW | PARTIALLY_FILLED | FILLED | FAILED
filledBaseAmountstringCumulative filled base amount on the order. Positive magnitude.
filledQuoteAmountstringCumulative filled quote amount on the order. Positive magnitude.

FillResource

CampoTipoDescripción
idstringPublic fill id. This is the same value the ledger entry carries as source.id, so a fill and its ledger movements join with no extra lookup.
orderIdstringId of the order this fill belongs to.
sequencenumber1-based position of this fill within its order. A normal convert has exactly one fill; an on-credit (capacity) order has several. Ej.: 1.
sidestringEj.: BUY.
marketstringEj.: BTC-CLP.
baseAssetstring
quoteAssetstring
baseAmountstringBase amount filled by this fill. Positive magnitude.
quoteAmountstringQuote amount filled by this fill. Positive magnitude.
ratestring
multiplierstringRebase factor applied to baseAmount and rate, as it stood AT THIS FILL — not today. "1" when no scaling applies. Divide baseAmount by it to recover the settled (SPV) figure, which is what moved on chain and in the ledger. Ej.: 1.
assetFormatanyWhich representation the amounts and baseAsset 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.
onCreditbooleanWhether the owning order was funded on credit (capacity).
executedAtstring
orderFillOrderState
baseanyThe settled (SPV) figures for this fill. Present on every read, in either assetFormat. These are the amounts the ledger entries carrying this fill id will show, so a fill and its ledger movements reconcile without converting anything.

OrderBaseRepresentation

CampoTipoDescripción
baseAssetstringSettled base asset — the SPV code for a tokenised equity, the ordinary code otherwise. Ej.: BTC.
quoteAssetstringQuote asset. Never rebases, so it always equals the top-level quoteAsset. Ej.: CLP.
baseAmountstringOrdered base amount in settled units. Ej.: 0.2.
filledBaseAmountstringCumulative filled base amount in settled units. Ej.: 0.2.
quoteAmountstringOrdered quote amount. Unscaled, so identical to the top level. Ej.: 11940000.
filledQuoteAmountstringCumulative filled quote amount. Unscaled, so identical to the top level. Ej.: 11940000.
ratestringRate in settled units — quote per SETTLED base unit. Ej.: 59700000.

OrderResource

CampoTipoDescripción
idstringPublic order id (the client order id). Ej.: clord_01HZY3K8QWERTY.
statusNEW | PARTIALLY_FILLED | FILLED | FAILED
sidestringEj.: BUY.
marketstringEj.: BTC-CLP.
baseAssetstring
quoteAssetstring
baseAmountstringOrdered base amount. Positive magnitude.
filledBaseAmountstringCumulative filled base amount. Positive magnitude.
quoteAmountstringOrdered quote amount. Positive magnitude.
filledQuoteAmountstringCumulative filled quote amount. Positive magnitude.
ratestring
multiplierstringRebase factor applied to the base amounts and rate, as it stood when the order was placed. "1" when no scaling applies. Divide a base amount by it to recover the settled (SPV) figure. Ej.: 1.
assetFormatanyWhich representation the amounts and baseAsset 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.
onCreditbooleanWhether the order was funded on credit (capacity).
createdAtstring
baseanyThe settled (SPV) figures for this order. Present on every read, in either assetFormat, so reconciling an order against the ledger or against its webhook never needs a second call with different parameters. On a base read it repeats the figures above.

PaginationMeta

CampoTipoDescripción
pagenumberEj.: 1.
limitnumberEj.: 25.
totalItemsnumberEj.: 100.
totalPagesnumberEj.: 4.

PlaceOrderDto

CampoTipoDescripción
orderIdstringThe orderId of the quote to execute (returned by POST /v2/quotes). Ej.: ord_abc123.

PlacedOrderResource

CampoTipoDescripción
idstringPublic order id (the client order id).
statusFILLED | PROCESSINGPlacement outcome. FILLED — the fill executed and its balance move is booked. PROCESSING — the fill executed but the balance credit/debit is still being reconciled internally; the order is accepted, not yet booked. Poll GET /v2/orders/{id} for the final state, and do NOT retry a PROCESSING order (a retry places a new order and double-executes).
transactionId (opcional)stringId of the first fill, when the order fills at placement (balance orders).

Problem

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

QuoteBaseRepresentation

CampoTipoDescripción
ratestringRate in settled units — quote asset per SETTLED base unit. Note the rate moves INVERSELY to the base amount under a rebase: the base leg divides going back to settled, so the rate multiplies. Ej.: 59700000.
baseAmountstringQuoted base amount in settled units. Ej.: 0.2.
quoteAmountstringQuoted quote amount. Never rebases — an xStock market quotes in fiat or a stablecoin — so this always equals the top-level quoteAmount. Repeated rather than omitted, which is what keeps the block one shape. Ej.: 11940000.

QuoteResource

CampoTipoDescripción
clientOrderIdstringDEPRECATED alias of orderId, carrying the same value. Use orderId. Kept for one release so a client reading this field does not break.
orderIdstringThe id of this quote — pass it to POST /v2/orders to execute. It is also the id the resulting order will carry, and the value GET /v2/orders, /v2/orders/{id}/fills, GET /v2/fills and GET /v2/ledger?orderId= all key on. One id, learned once, used through the whole flow.
marketstringThe market this quote priced, spelled exactly as GET /v2/markets publishes it — so it can be passed straight back to GET /v2/markets/{market}. Without it a stored quote is not self-describing: the numbers below mean nothing without knowing what was priced. This is the market Skipo RESOLVED, which is authoritative over the baseAsset/quoteAsset you sent — those are matched case-insensitively, so the casing here may differ from your request. Ej.: BTC-CLP.
ratestringQuoted exchange rate. Ej.: 59700000.
baseAmountstringQuoted base amount. Positive magnitude. Ej.: 0.2.
quoteAmountstringQuoted quote amount. Positive magnitude. Ej.: 11940000.
quotedAtstring | nullWhen the quote was produced, ISO-8601. null if the upstream time was unusable. Ej.: 2026-07-28T12:34:56.789Z.
expiresAtstring | nullWhen this quote stops being confirmable, ISO-8601 — about five seconds after quotedAt. Execute it with POST /v2/orders before this instant; afterwards expect quotation_expired and request a fresh quote. null means the expiry could not be determined — treat that as unknown, never as already expired. Ej.: 2026-07-28T12:35:01.789Z.
multiplierstringThis asset's rebase factor as it stands NOW, published whether or not it was applied — so a client can convert between the two representations without a second read. "1" when the asset does not rebase. It is also the factor the resulting order and its fills will carry, because it is stamped when the order is created from this quote. Ej.: 1.
assetFormatanyWhich representation rate and baseAmount 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.
baseanyThe same quote in SETTLED units — what the resulting order and its fills will move on chain and in the ledger. Present in BOTH representations, so a client reconciling a quote against the order it becomes never has to re-request it with a different assetFormat. On a base read it repeats the figures above rather than disappearing, which is what keeps the shape stable.

Volver a la referencia de endpoints. Ver también: Paginación · Errores · Ids y correlación.