Ids y correlación
Todo recurso de v2 expone un campo id, y ese mismo valor sirve para volver a
consultarlo y para encontrarlo en el libro contable. Esta página es el contrato completo:
qué id devuelve cada recurso y cómo saltar de uno a otro.
La regla en una línea
El
idde un retiro, depósito o fill es exactamente el valor que su asiento contable publica ensource.id.
Por eso nunca necesitas recorrer el libro buscando: filtras por él.
Recursos y sus ids
| Recurso | id | Volver a consultarlo |
|---|---|---|
| Retiro | id del retiro | GET /v2/withdrawals/{id} |
| Depósito | id del depósito | GET /v2/deposits/{id} |
| Orden | id de la orden (tu client order id) | GET /v2/orders/{id} |
| Fill | id del fill | GET /v2/fills?orderId=… |
| Asiento contable | id del asiento | GET /v2/ledger/{id} |
El asiento contable apunta hacia atrás
Cada entrada de GET /v2/ledger lleva un objeto source que dice qué la causó:
{
"id": "lm_998877",
"source": { "type": "withdrawal", "id": "wd_123" },
"type": "WITHDRAWAL",
"subType": "EXTERNAL_CRYPTO",
"assetSymbol": "USDT",
"amount": "150",
"fee": "0.5",
"total": "150.5",
"balance": "849.5",
"createdAt": "2026-07-09T14:11:05.501Z"
}
source.type es uno de withdrawal, deposit, fill u other, y source.id es el id
de ese recurso. Es el mismo patrón que balance_transaction.source de Stripe.
Los saltos que vas a hacer
De un retiro o depósito a sus asientos
GET /v2/ledger?assetSymbol=USDT&sourceId=wd_123
Una sola llamada. sourceId filtra por el mismo valor que el recurso publica como id.
De una orden a todos sus asientos
Una orden se completa con 1..N fills, y cada fill genera asientos. Para no encadenar
consultas, el filtro orderId resuelve la cadena entera por ti:
GET /v2/ledger?assetSymbol=CLP&orderId=clord_01H…
Una conversión mueve dos activos (por ejemplo BTC y CLP), y assetSymbol es obligatorio en
el libro contable: selecciona qué pata estás mirando. Para ver ambas, haz una llamada
por activo.
De una orden a sus fills
GET /v2/orders/{id}/fills # anidada
GET /v2/fills?orderId={id} # equivalente, filtrando la colección global
Las dos devuelven el mismo recurso. Existen ambas porque Coinbase y Binance también las tienen y cada cliente alcanza una distinta. Ambas paginan por cursor.
De un fill a la orden que lo contiene
El fill trae orderId, y además incrusta el estado acumulado de la orden para que no
tengas que releerla después de cada ejecución:
{
"id": "1096473",
"orderId": "clord_01H…",
"sequence": 2,
"side": "BUY",
"market": "BTC-CLP",
"baseAmount": "0.004",
"quoteAmount": "260000.00",
"rate": "65000000.00",
"multiplier": "1",
"onCredit": true,
"executedAt": "2026-07-09T14:07:11.000Z",
"order": {
"status": "PARTIALLY_FILLED",
"filledBaseAmount": "0.008",
"filledQuoteAmount": "520000.00"
}
}
sequence es la posición del fill dentro de su orden, empezando en 1.
Órdenes y fills
Una orden es lo que creas al confirmar una cotización. Un fill es cada ejecución contra ella.
- Una conversión normal → exactamente un fill.
- Una orden a crédito (
onCredit: true) → varios fills, a medida que se paga la deuda.
Por eso filledBaseAmount puede ir por debajo de baseAmount durante un tiempo, y por eso
el webhook fill.created puede llegar varias veces para el mismo orderId.
Convenciones de los importes
| Convención | Qué significa |
|---|---|
| Magnitudes positivas | amount, fee y total son siempre positivos en todos los recursos. La dirección la da el tipo de recurso o el type del asiento, nunca el signo. |
balance sí lleva signo | Es un estado (el saldo tras el asiento), no un movimiento. No se convierte a magnitud. |
| MAYÚSCULAS | status, type, subType y side son siempre mayúsculas: FILLED, WITHDRAWAL, EXTERNAL_CRYPTO, BUY. |
| Decimales como cadena | Los importes viajan como cadenas para no perder precisión. Parséalos con un tipo decimal, nunca con un float. |