Saltar al contenido principal

Contacts

Withdrawal contacts (read + reference edit)

GET /v2/contacts

List contacts

Saved withdrawal destinations. A contact is what POST /v2/withdrawals sends to, and its asset is fixed — a withdrawal whose asset does not match its destination contact is rejected. Contacts cannot be created through v2; add them from the Skipo dashboard.

Parámetros

ParámetroEnTipoRequeridoDescripción
pagequeryintegernoDefault: 1.
limitqueryintegernoDefault: 25.
typequeryINTERNAL | EXTERNAL_CRYPTO | BANK_ACCOUNTnoFilter by contact type.

Respuestas

CódigoDescripciónCuerpo
200Éxito.data: ContactResource[] · 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/contacts/{contactId}

Get a contact by id

Use it to confirm a destination before signing a withdrawal — the asset and the address or account it resolves to are what the withdrawal will actually use.

Parámetros

ParámetroEnTipoRequeridoDescripción
contactIdpathstring

Respuestas

CódigoDescripciónCuerpo
200Éxito.ContactResource
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).

PATCH /v2/contacts/{contactId}

Edit a contact's reference/alias

Edits YOUR label for the contact, nothing else. The destination itself — address, network, bank account, asset — is immutable through this API, so this call can never redirect where money goes. To change a destination, create a new contact from the dashboard.

Parámetros

ParámetroEnTipoRequeridoDescripción
contactIdpathstring

Cuerpo de la peticiónUpdateContactReferenceDto

Respuestas

CódigoDescripciónCuerpo
200Éxito.ContactResource
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).
404application/problem+json (RFC 9457) — branch on code, not on the status: not_found (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

BankContactDetails

CampoTipoDescripción
assetSymbolstring | nullAsset this account settles in. Always a FIAT code — a bank account cannot be denominated in a crypto asset or a tokenised equity. Ej.: CLP.
nationalIdstring | nullThe account holder's national id.
bankIdstring | null
bankNamestring | nullEj.: Banco de Chile.
accountTypeIdstring | null
bankAccountTypestring | nullEj.: CHECKING.
bankAccountNumberstring | null
accountEmailstring | null

ContactResource

CampoTipoDescripción
idstring
referencestring | null
typeINTERNAL | EXTERNAL_CRYPTO | BANK_ACCOUNTWhich kind of destination this is, and therefore which detail block is present: EXTERNAL_CRYPTOcrypto, BANK_ACCOUNTbank, INTERNAL → neither.
aliasstring
createdAtstring
updatedAtstring
crypto (opcional)anyPresent only when type is EXTERNAL_CRYPTO.
bank (opcional)anyPresent only when type is BANK_ACCOUNT.

CryptoContactDetails

CampoTipoDescripción
assetSymbolstring | nullAsset code this address receives. Ej.: BTC.
assetNamestring | nullEj.: Bitcoin.
networkSymbolstring | nullNetwork the address lives on, exactly as it was stored when the contact was created — passed through UNNORMALIZED. Kept for compatibility; it is NOT a stable key. Use networkId below instead — it is the canonical chain identifier and it is published on GET /v2/assets too, so the two sides now join directly. Why this field cannot be that key: it conflates the chain with the token standard and with the chain native coin. A BNB Smart Chain contact reports BNB here (the native COIN), while a movement on the same chain, to the same address, reports BEP20 (the TOKEN STANDARD). Neither is the chain, which is BSC. The inconsistency is not confined to contacts. Measured on production, the MOVEMENT rows carry two spellings for one chain: 164,192 withdrawals say BEP20 while 1,614 say BSC; 1,501 say ETH while 455 say ERC20; Avalanche appears as both AVAXC and AVAX. The field also carries values that are not networks at all (INTERNAL on 56,745 withdrawals, FIAT_NETWORK on 15,396, plus EARN and REDPAY) and prose (Dogecoin, Stellar Network, XRP Ledger). Movements are unchanged and still read this way. GET /v2/assets no longer publishes a networkSymbol at all — it was removed rather than rewritten, because the reference surface now reads the canonical registry (crypto_network) and any value carried over would have silently changed meaning. Contacts keep theirs because here it is the contact own stored data, not a lookup. Ej.: BTC.
networkNamestring | nullHuman-readable network name, for DISPLAY. It agrees with GET /v2/assets and with the movement payloads, but do not key on it: it is prose, and Ethereum (ERC20) is the one name on production that does not resolve to a single network. To match a contact against an asset supported networks, use networkId. It is the canonical chain identifier and it is now published on BOTH this resource and GET /v2/assets, so the two sides join directly. Earlier revisions of this field said to match on the name until a canonical registry existed — it exists, and this is it. Ej.: Bitcoin.
networkIdstring | nullThe CANONICAL chain identifier, from maintainers chain registry — BSC, ETH, TRON, BITCOIN, STELLAR_NETWORK. This is the field to match against the networkId published by GET /v2/assets, and it is a stable key, which networkSymbol above is not. It is also what the industry keys on: Binance identifies BNB Smart Chain as network: "BSC", and this says BSC too. null only when the network does not resolve in the registry. Ej.: BITCOIN.
evmChainIdnumber | nullEIP-155 chain id for an EVM chain — 56 for BNB Smart Chain, 1 for Ethereum. null on a non-EVM chain. Ej.: 1.
networkNativeAssetstring | nullThe chain NATIVE COIN symbol — BNB for BNB Smart Chain. This is the asset that pays gas, NOT an identifier for the chain; networkId is that. Note networkSymbol above happens to carry this value today, which is exactly the confusion networkId resolves. Ej.: BTC.
addressstring | nullThe on-chain destination address.
tagstring | nullDestination tag / memo, for chains that require one (XRP, XLM…). Null otherwise.

PaginationMeta

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

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.

UpdateContactReferenceDto

CampoTipoDescripción
referencestringNew reference/alias label for the contact (does not change the destination).

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