cryptoinfraDocs

#Reference

Asset catalogue, fee schedule, live prices

Open as MarkdownFor AI assistants

7 endpoints. Generated from docs/openapi.yaml v1.0.0.

EndpointSummary
GET /v1/assetsList enabled assets
GET /v1/a/{token}PUBLIC — a merchant's affiliate ledger
GET /v1/merchant/affiliate-ledgerThe link to your public affiliate ledger
POST /v1/merchant/affiliate-ledger/rotateReplace the link (dashboard owner, both codes)
GET /v1/pricingPUBLIC — the live price sheet
GET /v1/feesYour effective fee schedule
GET /v1/pricesLive market prices

#GET/v1/assets

List enabled assets · Auth: bearer API key · operationId: listAssets

The asset catalogue with decimals, confirmation requirements, the flat withdrawal fee, and swappable — false when no exchange can route the asset (leave it out of a swap picker; deposits and withdrawals are unaffected).

#Responses

StatusBodyMeaning
200object[]Enabled assets.
401ErrorMissing, malformed or unknown API key.

200 response body

FieldTypeDescription
[].id requiredstring—
[].chain requiredstringThe chain an address or asset is on. TRON is the only network the platform serves: btc, eth, bsc and sol were retired — historical addresses on them are never handed out again and nothing scans them. Read the value as an open string rather than a closed list, so a chain added later does not break your client. (one of tron)
[].symbol requiredstring—
[].contract_address requiredstring | nullnull for native coins; the token contract/mint otherwise.
[].decimals requiredinteger—
[].confirmations_required requiredinteger—
[].min_deposit requiredstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
[].withdraw_fee requiredstringThe STATIC fallback fee for a withdrawal of this asset — what is charged as fee only when no live network price can be read (dynamic: false on the quote). The live figure, network gas included, is on GET /v1/withdrawal-fee-quote and GET /v1/pricing. The energy a transfer consumes is rented by us, so you never hold TRX and never top up a gas balance. It does not vary with the recipient. A TRC20 transfer to an address that has never held the token costs roughly twice the energy of one to an existing holder, and that difference is absorbed here rather than passed on — you cannot see which case a customer's wallet is, so you cannot price it. Read it at runtime; it is the number that will be charged.
[].min_withdrawal requiredstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
[].swappable requiredbooleanFalse when no exchange can route this asset. Leave it out of a swap picker — POST /v1/swap/quote and POST /v1/exchange/quote refuse it with 400 invalid_pair. Deposits and withdrawals are unaffected.
json
[
  {
    "id": "usdt_trc20",
    "chain": "tron",
    "symbol": "string",
    "contract_address": "string",
    "decimals": 1,
    "confirmations_required": 1,
    "min_deposit": "1.5",
    "withdraw_fee": "1.5",
    "min_withdrawal": "1.5",
    "swappable": true
  }
]

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/assets' \
  -H 'Authorization: Bearer ck_live_your_key'

#GET/v1/a/{token}

PUBLIC — a merchant's affiliate ledger · Auth: none — public · operationId: getAffiliateLedger

No authentication: the token (256 bits, minted for the merchant on GET /v1/merchant/affiliate-ledger) is the whole authorization, and it reads that ONE merchant's affiliate commission — their share of our fee, total per asset and one line per operation that earned some — and nothing else: no customer ids, no addresses. This is what the hosted page /a/{token} on the merchant origin renders. A rotated token answers 404 from that moment; responses are no-store.

#Parameters

NameInTypeRequiredDescription
tokenpathstringyes—
limitqueryintegerno— (default 50; min 1; max 200)
offsetqueryintegerno— (default 0; min 0)

#Responses

StatusBodyMeaning
200objectThe ledger.
404—No merchant holds this token (or it was rotated).

200 response body

FieldTypeDescription
merchantobject—
merchant.namestring—
merchant.merchant_idstring | null—
share_bpsinteger—
share_percentnumber—
totalsobject[]—
totals[].asset_idstring—
totals[].symbolstring—
totals[].amountstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
totals[].amount_basestringExact integer amount in the asset's smallest unit. (pattern ^[0-9]+$)
totals[].countinteger—
linesobject[]—
lines[].idinteger—
lines[].atstring<date-time>—
lines[].operationstring(one of deposit, withdrawal, swap, card_issue, card_load)
lines[].refobjectWhat earned it
lines[].ref.kindstring—
lines[].ref.idstring—
lines[].our_feeobjectOur fee the share was taken of.
lines[].share_bpsinteger—
lines[].commissionobjectWhat the merchant received.
total_linesinteger—
limitinteger—
offsetinteger—
generated_atstring<date-time>—
json
{
  "merchant": {
    "name": "string",
    "merchant_id": "string"
  },
  "share_bps": 1,
  "share_percent": 0,
  "totals": [
    {
      "asset_id": "string",
      "symbol": "string",
      "amount": "1.5",
      "amount_base": "1500000000",
      "count": 1
    }
  ],
  "lines": [
    {
      "id": 1,
      "at": "2026-08-31T09:15:00.000Z",
      "operation": "deposit",
      "ref": {
        "kind": "string",
        "id": "string"
      },
      "our_fee": {},
      "share_bps": 1,
      "commission": {}
    }
  ],
  "total_lines": 1,
  "limit": 1,
  "offset": 1,
  "generated_at": "2026-08-31T09:15:00.000Z"
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/a/string'

#GET/v1/merchant/affiliate-ledger

The link to your public affiliate ledger · Auth: bearer API key · operationId: merchantAffiliateLedgerGet

Your shareable page — your commission, total and line by line, readable without a login by anyone holding the link. Minted on first read. Works with an API key or a dashboard login.

#Responses

StatusBodyMeaning
200objectThe link.
401ErrorMissing, malformed or unknown API key.

200 response body

FieldTypeDescription
url requiredstring—
json
{
  "url": "https://merchant.cryptoinfra.build/a/…"
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/merchant/affiliate-ledger' \
  -H 'Authorization: Bearer ck_live_your_key'

#POST/v1/merchant/affiliate-ledger/rotate

Replace the link (dashboard owner, both codes) · Auth: bearer API key · operationId: merchantAffiliateLedgerRotate

Mints a fresh token; the old link answers 404 from that moment. Dashboard only — an owner login with the authenticator and the emailed code — and 403 session_required to an API key.

#Responses

StatusBodyMeaning
200objectThe new link.
403—Not a dashboard owner

200 response body

FieldTypeDescription
url requiredstring—
json
{
  "url": "string"
}

#Example request

bash
curl -X POST 'https://api.cryptoinfra.build/v1/merchant/affiliate-ledger/rotate' \
  -H 'Authorization: Bearer ck_live_your_key'

#GET/v1/pricing

PUBLIC — the live price sheet · Auth: none — public · operationId: getPricing

No authentication. Every price the platform charges, read live: the flat platform fee and the network figures per asset for deposits (free), payouts and swaps, plus every card product's issue, load and close terms. Built once a minute and shared, so it is cheap to poll. It is what the documentation renders, so the docs can never show a number this endpoint does not. A merchant's own fees are not here — they are on GET /v1/fees with that merchant's key. The exact charge for one send is GET /v1/withdrawal-fee-quote. as_of is when the sheet was priced; every network figure carries dynamic (live now, or the static_fallback) so nothing here is mirrored as a fixed charge.

#Responses

StatusBodyMeaning
200objectThe price sheet.
503—The sheet cannot be built right now.

200 response body

FieldTypeDescription
as_ofstring<date-time>—
cached_for_secondsinteger—
rulestring—
assetsobject[]—
assets[].asset_idstring—
assets[].symbolstring—
assets[].chainstring—
assets[].min_depositstring—
assets[].min_withdrawalstring—
assets[].depositobjectplatform_flat
assets[].withdrawalobjectplatformflat, networkfee, networkfeefreshrecipient, firstsendactivationfee, total, totalfreshrecipient, dynamic, staticfallback, pricedfrom, and networkfeeburningtrx / networkfeeburningtrxfreshrecipient — what the same transfer burns in a wallet without energy, at the chain's own rates, for a "you save" comparison
assets[].swapobjectplatform_flat
cardsobjectgas (per load, priced live), gasdynamic, gasburningtrx (what that send burns in a wallet without energy), and products[] with issuefee, minopeningbalance, loadfeebps, loadfeemin, loadfeeflat, closefee, issuetotalatminimum, cardholderfees, and limits (pertransaction, daily, monthly, atmsingle, atmperday, atmmonthly in the card's currency; validity_years) — null on both for a BIN whose terms are not published yet.
json
{
  "as_of": "2026-08-31T09:15:00.000Z",
  "cached_for_seconds": 1,
  "rule": "string",
  "assets": [
    {
      "asset_id": "string",
      "symbol": "string",
      "chain": "string",
      "min_deposit": "string",
      "min_withdrawal": "string",
      "deposit": {},
      "withdrawal": {},
      "swap": {}
    }
  ],
  "cards": {}
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/pricing'

#GET/v1/fees

Your effective fee schedule · Auth: bearer API key · operationId: getFees

The exact fees that will be charged, per asset, for deposits and payouts. The swap/exchange fee is not here — it is visible only on POST /v1/swap/quote and POST /v1/exchange/quote (fee, fee_base).

#Responses

StatusBodyMeaning
200FeesResponseEffective fee schedule.
401ErrorMissing, malformed or unknown API key.

200 response body — FeesResponse

FieldTypeDescription
priced_atstring<date-time>When every network figure in this response was priced — computed for this response, never stored.
note requiredstring—
assets requiredobject[]—
assets[].asset_id requiredstring—
assets[].symbol requiredstring—
assets[].deposit requiredobjectDeposits to the addresses we issue are free: flat, network_fee and total read 0, and the whole amount is credited (less only your own merchant_fee, if you set one). dynamic says whether a non-zero network part was priced live.
assets[].deposit.percent_bps requiredintegerBasis points (100 = 1%).
assets[].deposit.percent requirednumberSame as percent_bps / 100.
assets[].deposit.flat requiredstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
assets[].deposit.flat_base requiredstringExact integer amount in the asset's smallest unit. (pattern ^[0-9]+$)
assets[].deposit.min requiredstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
assets[].deposit.min_base requiredstringExact integer amount in the asset's smallest unit. (pattern ^[0-9]+$)
assets[].deposit.max requiredstring | nullnull when uncapped.
assets[].deposit.max_base requiredstring | null—
assets[].withdrawal requiredobjectOur live network cost plus a flat platform fee. Your flat platform part (flat) plus today's live network figures: network_fee for a recipient that already holds the token, network_fee_fresh_recipient for one that does not, first_send_activation_fee added once on a user's first send, and total = flat + network_fee. dynamic: false means the static fallback is showing. GET /v1/withdrawal-fee-quote is the charge for a specific send.
assets[].withdrawal.percent_bps requiredintegerBasis points (100 = 1%).
assets[].withdrawal.percent requirednumberSame as percent_bps / 100.
assets[].withdrawal.flat requiredstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
assets[].withdrawal.flat_base requiredstringExact integer amount in the asset's smallest unit. (pattern ^[0-9]+$)
assets[].withdrawal.min requiredstringA monetary value as a decimal string. Always paired with a *_base field that carries the exact integer base-unit value; compute with the _base string.
assets[].withdrawal.min_base requiredstringExact integer amount in the asset's smallest unit. (pattern ^[0-9]+$)
assets[].withdrawal.max requiredstring | nullnull when uncapped.
assets[].withdrawal.max_base requiredstring | null—
json
{
  "priced_at": "2026-08-31T09:15:00.000Z",
  "note": "string",
  "assets": [
    {
      "asset_id": "string",
      "symbol": "string",
      "deposit": {
        "percent_bps": 1,
        "percent": 0,
        "flat": "1.5",
        "flat_base": "1500000000",
        "min": "1.5",
        "min_base": "1500000000",
        "max": "string",
        "max_base": "string"
      },
      "withdrawal": {
        "percent_bps": 1,
        "percent": 0,
        "flat": "1.5",
        "flat_base": "1500000000",
        "min": "1.5",
        "min_base": "1500000000",
        "max": "string",
        "max_base": "string"
      }
    }
  ]
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/fees' \
  -H 'Authorization: Bearer ck_live_your_key'

#GET/v1/prices

Live market prices · Auth: bearer API key · operationId: getPrices

USD spot prices for the symbols in the catalogue (GET /v1/assets): TRX, USDT, USDC. Display/estimation only — never for settlement.

#Responses

StatusBodyMeaning
200PricesResponsePrices (best-effort; may be empty on a feed outage).
401ErrorMissing, malformed or unknown API key.

200 response body — PricesResponse

FieldTypeDescription
currency requiredstring(one of usd)
prices requiredobject[]—
prices[].symbol requiredstring—
prices[].price_usd requirednumber—
prices[].change_24h_pct requirednumber—
prices[].sparkline requirednumber[]7-day downsampled price points for a sparkline; empty when unavailable.
json
{
  "currency": "usd",
  "prices": [
    {
      "symbol": "USDT",
      "price_usd": 0,
      "change_24h_pct": 0,
      "sparkline": [
        0
      ]
    }
  ]
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/prices' \
  -H 'Authorization: Bearer ck_live_your_key'