POST /v1/currencies

List active assets in the catalog with per-asset precision and capabilities.

POST/api/v1/currenciesAuth optional

Returns the active asset catalog: every currency/network combination the engine will receive or send right now. Aggregator integrations call this on startup and re-poll every 30–60 seconds to pick up operator-side asset toggles.

The body is served from a 30-second server-side cache. Calling more often returns the cached snapshot. The empty-body convention {} is honoured for forward compatibility. No filter fields are accepted today.

Request

Body
(empty body)object
Send {} as the request body. Unsigned callers may omit the auth headers entirely. Signed callers must still HMAC the empty object; the signature is computed over the literal two bytes {}.

Response

200 OK
{
  "code": 0,
  "msg": "",
  "data": [
    {
      "code": "btc",
      "coin": "BTC",
      "network": "Bitcoin",
      "name": "Bitcoin",
      "recv": true,
      "send": true,
      "tag": null,
      "logo": null,
      "color": null,
      "minAmount": null,
      "maxAmount": null,
      "precision": 8
    },
    {
      "code": "usdt_trc20",
      "coin": "USDT",
      "network": "Tron",
      "name": "Tether (Tron)",
      "recv": true,
      "send": true,
      "tag": null,
      "logo": null,
      "color": null,
      "minAmount": null,
      "maxAmount": null,
      "precision": 6
    }
  ]
}
Fields
data[].codestring
Canonical asset id used in every other endpoint (e.g. "btc", "usdt_trc20", "usdc_arb").
data[].coinstring
Trading symbol shown in human-facing surfaces (e.g. "BTC", "USDT").
data[].networkstring
Settlement network name (e.g. "Bitcoin", "Tron", "Arbitrum").
data[].namestring
Long display name for UI rendering.
data[].recvboolean
Always true for entries in this list (assets we accept as deposits).
data[].sendboolean
True when the operator has enabled payouts on the asset’s network. Greyed-out destinations should map to send = false.
data[].tagstring | null
Memo/destination-tag flag for networks that need it. Always null today (no such networks are supported).
data[].logostring | null
Reserved. Always null.
data[].colorstring | null
Reserved. Always null.
data[].minAmountstring | null
Always null. Per-asset minimums depend on a live USD price and would couple this catalog to the rates feed. Call /v1/price for current bounds.
data[].maxAmountstring | null
Always null. See minAmount.
data[].precisionnumber
Maximum number of decimal places accepted in amount fields for this asset.

Errors

codemsgHTTPDescription
11UPSTREAM_ERROR503A required upstream is temporarily unavailable. Retry with exponential backoff.

Code examples

# /v1/currencies accepts anonymous calls — no signing required.
BODY='{}'
curl -sS -X POST "https://0trace.io/api/v1/currencies" \
  -H "Content-Type: application/json" \
  --data "$BODY"

# Authenticated call (counts toward your rate-limit budget):
APIKEY="rWqZ...Rg"
APISECRET="G1JV...n4"
NONCE=$(openssl rand -hex 16)
SIGN=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$APISECRET" | sed 's/^.* //')
curl -sS -X POST "https://0trace.io/api/v1/currencies" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: $APIKEY" \
  -H "X-API-SIGN: $SIGN" \
  -H "X-API-NONCE: $NONCE" \
  --data "$BODY"

Rate limit

Weight 1 per call. Unsigned calls bypass the per-partner bucket entirely; signed calls are charged 1 weight unit each.

Notes

The response always carries Cache-Control: no-store so HTTP intermediaries do not double-cache on top of our own server-side snapshot. Treat the 30-second cache window as the only freshness guarantee.

Partner API.
Same engine as 0trace.

A private partner integration surface. Signed quotes, server-side pricing, webhook delivery, multiple reference codes, and a self-serve cabinet — all backed by the production exchange engine.

Support

Questions? Answers.

Get the latest updates

Follow us on X

The 0trace team will never ask for KYC or AML. We retain no logs, metadata, or tracking cookies.

Learn more