Orders
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ámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | query | integer | no | Default: 25. |
cursor | query | string | no | Opaque cursor from the previous page's pagination.nextCursor. |
orderId | query | string | no | Restrict to the fills of one order (its public id). |
market | query | string | no | Filter to one market, by the id published by GET /v2/markets — the same value this endpoint returns as market. |
assetSymbol | query | string | no | Matches either leg — fills that touched this asset. |
side | query | BUY | SELL | no | |
startDate | query | string | no | ISO-8601 start date (inclusive). |
endDate | query | string | no | ISO-8601 end date (exclusive). |
assetFormat | query | base | rebased | no | How 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. Default: rebased. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
200 | Éxito. | data: FillResource[] · pagination: CursorMeta |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/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). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
GET /v2/orders
List orders
Parámetros
| Parámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
page | query | integer | no | Default: 1. |
limit | query | integer | no | Default: 25. |
status | query | NEW | PARTIALLY_FILLED | FILLED | FAILED | no | |
baseAsset | query | string | no | Filter by base asset code. |
quoteAsset | query | string | no | Filter by quote asset code. |
market | query | string | no | Filter to one market, by the id published by GET /v2/markets — the same value this endpoint returns as market. |
side | query | BUY | SELL | no | |
assetFormat | query | base | rebased | no | How to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity; base = settled SPV tokens. No effect on other assets. Default: rebased. |
startDate | query | string | no | ISO-8601 start date. |
endDate | query | string | no | ISO-8601 end date. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
200 | Éxito. | data: OrderResource[] · pagination: PaginationMeta |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/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). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/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ón — PlaceOrderDto
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
201 | Order placed and filled — the balance move is booked (status: "filled"). | PlacedOrderResource |
202 | Order 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 |
400 | application/problem+json (RFC 9457) — branch on code, not on the status: validation_error (not retryable). | — |
401 | application/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). | — |
403 | application/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). | — |
422 | application/problem+json (RFC 9457) — branch on code, not on the status: unprocessable (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
GET /v2/orders/{id}
Get an order by id
Parámetros
| Parámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | path | string | sí | |
assetFormat | query | base | rebased | no | How 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. Default: rebased. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
200 | Éxito. | OrderResource |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/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). | — |
404 | application/problem+json (RFC 9457) — branch on code, not on the status: not_found (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/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ámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | path | string | sí | |
limit | query | integer | no | Default: 25. |
cursor | query | string | no | Opaque cursor from the previous page's pagination.nextCursor. |
assetFormat | query | base | rebased | no | How 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. Default: rebased. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
200 | Éxito. | data: FillResource[] · pagination: CursorMeta |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/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). | — |
404 | application/problem+json (RFC 9457) — branch on code, not on the status: not_found (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/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ón — CreateQuoteDto
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
201 | Creado. | QuoteResource |
400 | application/problem+json (RFC 9457) — branch on code, not on the status: validation_error (not retryable). | — |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/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). | — |
422 | application/problem+json (RFC 9457) — branch on code, not on the status: unprocessable (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
Esquemas
CreateQuoteDto
| Campo | Tipo | Descripción |
|---|---|---|
baseAsset | string | Base 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. Ej.: BTC. |
quoteAsset | string | Quote asset code of the market. Ej.: CLP. |
amountAsset | string | Which 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. Ej.: BTC. |
side | BUY | SELL | |
amount | string | Amount to convert, denominated in amountAsset. A decimal string. Ej.: 0.5. |
CursorMeta
| Campo | Tipo | Descripción |
|---|---|---|
count | number | Number of items in THIS page. Ej.: 25. |
nextCursor | string | null | Opaque 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. |
FillOrderState
| Campo | Tipo | Descripción |
|---|---|---|
status | NEW | PARTIALLY_FILLED | FILLED | FAILED | |
filledBaseAmount | string | Cumulative filled base amount on the order. Positive magnitude. |
filledQuoteAmount | string | Cumulative filled quote amount on the order. Positive magnitude. |
FillResource
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Public 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. |
orderId | string | Id of the order this fill belongs to. |
sequence | number | 1-based position of this fill within its order. A normal convert has exactly one fill; an on-credit (capacity) order has several. Ej.: 1. |
side | string | Ej.: BUY. |
market | string | Ej.: BTC-CLP. |
baseAsset | string | |
quoteAsset | string | |
baseAmount | string | Base amount filled by this fill. Positive magnitude. |
quoteAmount | string | Quote amount filled by this fill. Positive magnitude. |
rate | string | |
multiplier | string | Rebase 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. |
onCredit | boolean | Whether the owning order was funded on credit (capacity). |
executedAt | string | |
order | FillOrderState |
OrderResource
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Public order id (the client order id). |
status | NEW | PARTIALLY_FILLED | FILLED | FAILED | |
side | string | Ej.: BUY. |
market | string | Ej.: BTC-CLP. |
baseAsset | string | |
quoteAsset | string | |
baseAmount | string | Ordered base amount. Positive magnitude. |
filledBaseAmount | string | Cumulative filled base amount. Positive magnitude. |
quoteAmount | string | Ordered quote amount. Positive magnitude. |
filledQuoteAmount | string | Cumulative filled quote amount. Positive magnitude. |
rate | string | |
multiplier | string | Rebase 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. |
onCredit | boolean | Whether the order was funded on credit (capacity). |
createdAt | string |
PaginationMeta
| Campo | Tipo | Descripción |
|---|---|---|
page | number | Ej.: 1. |
limit | number | Ej.: 25. |
totalItems | number | Ej.: 100. |
totalPages | number | Ej.: 4. |
PlaceOrderDto
| Campo | Tipo | Descripción |
|---|---|---|
orderId | string | The orderId of the quote to execute (returned by POST /v2/quotes). Ej.: ord_abc123. |
PlacedOrderResource
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Public order id (the client order id). |
status | FILLED | PROCESSING | Placement 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) | string | Id of the first fill, when the order fills at placement (balance orders). |
Problem
| Campo | Tipo | Descripción |
|---|---|---|
type | string | Stable problem-type URI. Resolves to docs for this error. Ej.: https://docs.skipo.com/errors/rate_limited. |
title | string | Short, human-readable summary (stable, English). Ej.: Rate limit exceeded. |
status | number | HTTP status code. Ej.: 429. |
code | string | Stable machine-readable error code (equals the last path segment of type). Ej.: rate_limited. |
retryable | boolean | Whether retrying the identical request may succeed. Ej.: true. |
detail (opcional) | string | Human-readable, possibly localized detail. |
instance (opcional) | string | The request path that produced the error. |
traceId (opcional) | string | Trace id — joins BigQuery api_request and Cloud Logging. |
QuoteResource
| Campo | Tipo | Descripción |
|---|---|---|
clientOrderId | string | DEPRECATED alias of orderId, carrying the same value. Use orderId. Kept for one release so a client reading this field does not break. |
orderId | string | The 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. |
market | string | The 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. |
rate | string | Quoted exchange rate. |
baseAmount | string | Quoted base amount. Positive magnitude. |
quoteAmount | string | Quoted quote amount. Positive magnitude. |
quotedAt | string | null | When the quote was produced, ISO-8601. null if the upstream time was unusable. Ej.: 2026-07-28T12:34:56.789Z. |
expiresAt | string | null | When 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. |
Volver a la referencia de endpoints. Ver también: Paginación · Errores · Ids y correlación.