Deposits
Deposit history
GET /v2/deposits
List deposits
Every credit to the account — on-chain arrivals, bank transfers and internal movements — newest first. subType tells them apart, and only the on-chain ones carry a transactionHash.
Amounts default to rebased. For a tokenised equity that means they are stated as the underlying equity, NOT as the tokens that moved on chain — read the base block, which is always present, to reconcile against a ledger entry or a webhook.
assetSymbol accepts either spelling of a tokenised equity: filtering by the rebased ticker finds the same deposits as the settled code.
Parámetros
| Parámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
page | query | integer | no | Default: 1. |
limit | query | integer | no | Default: 25. |
assetSymbol | query | string | no | |
status | query | string | no | |
subType | query | INTERNAL | EXTERNAL_CRYPTO | EXTERNAL_FIAT_BANK | EXTERNAL_FIAT_REDPAY_CHARGEBACK | no | |
assetFormat | query | AssetFormat | no | How to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity (real shares); base = settled SPV tokens, i.e. what was credited on chain and in the ledger. No effect on other assets. |
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: DepositResource[] · 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). | — |
GET /v2/deposits/{id}
Get a deposit by id
Takes the same assetFormat as the list, so one deposit reports the same figures whichever way you reach it. The id is the one carried as source.id on the matching ledger entry, so a ledger row and this resource can be joined without a search.
Parámetros
| Parámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | path | string | sí | |
assetFormat | query | AssetFormat | no | How to express tokenised-equity (xStock) amounts. rebased (default) = underlying equity (real shares); base = settled SPV tokens, i.e. what was credited on chain and in the ledger. No effect on other assets. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
200 | Éxito. | DepositResource |
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). | — |
Esquemas
DepositBaseRepresentation
| Campo | Tipo | Descripción |
|---|---|---|
asset | string | null | Asset code of the settled token. Populated on every read, including a rebased one — the rebased ticker maps back to the settled code through the maintainers snapshot. null only if that lookup misses, which means the asset is unknown to the snapshot rather than that the code was unobtainable. It is never the underlying ticker: a plausible-looking wrong code is worse than an obvious gap when reconciling against a webhook. Ej.: USDT. |
amount | string | Amount deposited, in settled units. Positive magnitude. Ej.: 2000. |
fee | string | Always zero — Skipo charges no deposit fees. Ej.: 0. |
total | string | Total credited, in settled units. Positive magnitude. Ej.: 2000. |
DepositResource
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Deposit id. Use it to re-fetch this deposit and to match its ledger entry (source.id). Ej.: 503c85d1-b415-4ad4-9c0c-3881e105101e. |
type | string | Ej.: DEPOSIT. |
subType | INTERNAL | EXTERNAL_CRYPTO | EXTERNAL_FIAT_BANK | EXTERNAL_FIAT_REDPAY_CHARGEBACK | |
assetSymbol | string | Asset code of the deposit. Ej.: USDT. |
amount | string | Amount deposited. Positive magnitude, in assetSymbol. Ej.: 2000. |
fee | string | Fee charged by Skipo for this deposit. Always zero — Skipo does not charge deposit fees. Present for a consistent shape across resources. Ej.: 0. |
total | string | Total credited to the balance. Positive magnitude, in assetSymbol. Ej.: 2000. |
status | string | Ej.: COMPLETED. |
createdAt | string | Ej.: 2026-07-15T18:08:14.637Z. |
transactionHash | string | null | On-chain transaction hash, when this deposit had one. null otherwise — an off-chain deposit (bank transfer, internal transfer, earn distribution) never has one, and an on-chain deposit that has not been broadcast yet does not have one YET. Top-level so that reading it never requires branching on subType. It is the same value as depositData.transactionHash, which remains for the sub-types that already published it; this field additionally covers on-chain sub-types that carry a hash but publish no depositData block. NOT a bank reference: on a fiat deposit this is always null, even though the underlying record may hold the bank's own transaction id. Do not assume a 0x prefix — BTC, Solana and Tron hashes have none. Ej.: 0x6392dc8a37abbfdc125c599aa57704100f7423e460d001ccabd09bc939c89e4d. |
bankReference | string | null | The bank's or payment provider's own reference for this deposit, when one was recorded. null on every non-fiat deposit, and null on a fiat deposit that carries no reference (the large majority — 225 of 112,281 bank deposits on prod have one). The counterpart of transactionHash: a deposit is settled either on a chain or through a bank, so at most one of the two fields is ever populated. Free-form and short (1-19 characters, not always numeric) — it is whatever the bank supplied, so treat it as an opaque string for reconciliation, never parse it. Ej.: null. |
senderName | string | null | Name of the bank account the transfer came FROM, as the sending bank reported it. null on every non-fiat deposit and on a fiat deposit created by an operator. Unnormalised — casing and accents are the bank’s, not ours. Ej.: JANE DOE. |
senderNationalId | string | null | National id of the sending account holder (in Chile, the RUT), and the key Skipo matches an incoming transfer on. ⚠️ Published ONLY when it equals your own — the nationalId on GET /v2/account. It is null whenever the money came from anyone else, so this field confirms a deposit was self-funded and never discloses a third party. On the automated rail that is the normal case by construction: Skipo credits whoever owns the sending id, so the sender IS the holder. Compared ignoring formatting, so 12.345.678-9 and 123456789 match. Ej.: 12.345.678-9. |
senderBankId | string | null | Identifier of the sending bank, as the rail reported it. Opaque — do not parse. Ej.: BANCO_DE_CHILE. |
senderAccount | string | null | Account number the transfer came from, as the sending bank reported it. Ej.: 00-123-45678-90. |
bankDescription | string | null | Free text the sender put on the transfer, when the rail carried any. Empty on most deposits (76.5% on prod), so treat its absence as normal rather than as an error. Distinct from bankReference, which is the operator’s own number for the movement. Ej.: transferencia. |
valueDate | string | null | When the money actually MOVED, as the rail reported it — as opposed to createdAt, which is when Skipo credited it. null on every non-fiat deposit. Use this to reconcile a month-end: on prod the two fall in different months on 1 deposit in 27 months, and the median gap is 91 seconds. Join to the ledger on source.id. NOT the clearing deadline the rail also publishes — that one falls AFTER the credit and would push deposits into the following month. Ej.: 2026-08-20T14:03:11Z. |
assetFormat | any | Which representation the top-level money fields are expressed in. Echoes what the request RESOLVED to, so a response that took the default is as self-describing as one that asked. Ej.: rebased. |
multiplier | string | Rebase factor as it stood when the deposit was created — not today. "1" when no scaling applies. base.amount x multiplier = amount when assetFormat is rebased. "1" is NOT a claim that the asset does not rebase; read GET /v2/assets for its class. Ej.: 1. |
base | DepositBaseRepresentation | |
depositData | object | Sub-type-specific details. The keys depend on transactionSubType, so branch on that rather than probing for fields. For EXTERNAL_CRYPTO this carries the CANONICAL chain identity, the same five fields GET /v2/assets[].networks and GET /v2/contacts publish — networkId (BSC, ETH, TRON), networkName, networkNativeAsset, evmChainId and assetType (the token standard, BEP20/ERC20/TRC20). Join on networkId: it is the one field that means the same thing on every v2 resource, so a movement, an asset and a saved destination line up without parsing prose. ⚠️ networkSymbol has been REMOVED from this block. It was the raw stored value and it disagreed with itself across the estate — 164,192 movements say BEP20 for the same chain 1,614 call BSC, and it also carried values that are not networks (INTERNAL, FIAT_NETWORK) and prose (Dogecoin, XRP Ledger). networkId replaces it and is a stable key. networkName above is the human-readable form. The canonical fields are always present on an EXTERNAL_CRYPTO movement and are null when the chain cannot be resolved, so the shape never changes underneath you. |
PaginationMeta
| Campo | Tipo | Descripción |
|---|---|---|
page | number | Ej.: 1. |
limit | number | Ej.: 25. |
totalItems | number | Ej.: 100. |
totalPages | number | Ej.: 4. |
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. |
Volver a la referencia de endpoints. Ver también: Paginación · Errores · Ids y correlación.