Skip to content

Instantly share code, notes, and snippets.

@Laiteux
Last active June 30, 2025 07:21
Show Gist options
  • Save Laiteux/fc01149cafb4f10fcea70f53e435c30f to your computer and use it in GitHub Desktop.
Save Laiteux/fc01149cafb4f10fcea70f53e435c30f to your computer and use it in GitHub Desktop.
Reverse-engineered, documented market data private API from Crypto Pro iOS/macOS app.

Crypto Pro App API

Reverse-engineered, documented market data private API from Crypto Pro iOS/macOS app.

Public endpoints, no authentication required (just a static timestamp int k query parameter).

Dictionary Endpoint

Provides reference data for assets and exchanges.

This is the lookup table to convert between asset IDs and symbols/names.

Should be cached locally and queried only once in a while as it rarely changes, or at least in a meaningful way.

⚠️ Some assets in this list have impersonators - for example, there are many assets with the BTC symbol. You should rely on the /markets.php API (documented below) for listing assets, and use dictionary.json only for translating IDs to symbols and names.

curl "https://cdn.cryptopro.app/data/dictionary.json"

Sample response:

{
  "a": [
    [6, "BTC", "Bitcoin", 3, "f09428"],
    [7, "ETH", "Ethereum", 3, "797faf"],
    [8, "XRP", "XRP", 3, ""],
    ...
    [1360, "TRX", "TRON", 3, "ff503d"],
    [3003, "BSV", "Bitcoin SV", 3, "ebb604"],
    ...
  ],
  "e": [
    [1, "Yahoo Finance", 1, 3600, "yahoo.com"],
    [2, "All Cryptos", 2, 60, "coinmarketcap.com"],
    [3, "Binance", 3, 300, "binance.com"],
    ...
  ],
  "l": [...],
  "o": [
    [0, "BTT:3121,CDT:1984,TRON:1360,TRX:1360,IOTA:13,HOT:2176,BLZ:1916,BAT:44,LEO:3359,BCHSV:3003,BCHABC:965,ONE:3390,KNC:1348,WAN:2059,VET:1259,ATOM:3199,ORS:2347,DOT:12008,UNI:12777,BEL:12742,XVS:13009,LIT:14439,GRT:13918,LUNA:8989,COMP:11750,CLV:16189"]
  ],
  "u": [...],
  "w": [...]
}

Response properties:

a - Assets array

Each asset has 5 values:

  • [0] - Asset ID (integer)
  • [1] - Symbol (string)
  • [2] - Full name (string)
  • [3] - Asset type: 1 = Fiat, 2 = Metal, 3 = Crypto
  • [4] - Hex color for UI (string, can be empty)

e - Exchanges array

Each exchange has 5 values:

  • [0] - Exchange ID (integer)
  • [1] - Display name (string)
  • [2] - Exchange type: 1 = Fiat aggregator, 2 = Crypto aggregator, 3 = Spot exchange
  • [3] - TTL/cache duration in seconds (integer)
  • [4] - Data source domain (string)

Other arrays:

  • l - UI presets for watch lists (?) - uncertain
  • o - Symbol aliases mapping alternative symbols to asset IDs
  • u - Feature flags for client
  • w - Popular assets list (?) - uncertain

Query Specific Assets

Get current market data for specific cryptocurrencies by their asset IDs.

This is the most efficient way to track a portfolio or watchlist, returning only the data queried in a compact format.

curl "https://api.cryptopro.app/v4/markets.php?i=6,7,8&k=17231040"

Response - 5 values per asset:

{
  "d": [
    [6, 107207, 0.0088, 299132, "1210112225559855668976666"], // BTC
    [7, 2423.74, -0.0119, 6485330, "9875467423334400224541233"], // ETH
    [8, 2.18, -0.002, 1010840000, "2002002429700242002"] // XRP
  ]
}
  • [0] - Asset ID (per dictionary.json)
  • [1] - Current price in USD (float)
  • [2] - 24h change as decimal (0.0088 = +0.88%)
  • [3] - 24h volume in asset units (multiply by [1] to get volume in USD)
  • [4] - Sparkline: string of digits 0-9 representing price trend

Query All Market Data

Get comprehensive market data from a specific exchange/aggregator.

Fiat Market Data

Exchange ID (e) 1 uses Yahoo Finance (per dictionary.json).

Returns simplified data with 5 values per currency pair.

curl "https://api.cryptopro.app/v4/markets.php?e=1&k=17231040"

Response - 5 values per currency:

{
  "d": [
    [1, 1, 0, 0, "0", 1, 1], // USD
    [2, 0.6532, -0.0015, 0, "56933550024555555555555", 2, 1], // AUD
    [3, 1.17192, 0.0008, 0, "232963540013444444444444", 3, 1], // EUR
    ...
  ]
}
  • [0] - Provider ID (Yahoo's internal ID) (?) - uncertain
  • [1] - Exchange rate to USD (float)
  • [2] - 24h change as decimal (-0.0015 = -0.15%)
  • [3] - 24h volume (always 0 for fiat)
  • [4] - Sparkline (string of digits 0-9)
  • [5] - Asset ID (per dictionary.json) - use to get symbol and name
  • [6] - Quote currency ID (1 = USD)

Note: Asset ID 1 is USD itself, hence rate is always 1.

Crypto Market Data

Exchange ID (e) 2 uses CoinMarketCap (per dictionary.json).

Returns extended information including market cap, supply data, and global market statistics.

Default returns ~18,000 cryptos (at time of writing); use l parameter to limit results.

curl "https://api.cryptopro.app/v4/markets.php?e=2&k=17231040"

Response - 10 values per asset + i global stats object:

{
  "d": [
    [6, 108110, 0.0140035, 298501, "1011222555985566897666899", 6, 1, 19883500, 19883500, 21000000], // BTC
    [7, 2507.94, 0.0209144, 7017060, "4334431222330011333112599", 7, 1, 120718000, 120718000, 0], // ETH
    [8, 2.21, 0.0100393, 1127880000, "200242970024200244", 8, 1, 59005500000, 99986000000, 100000000000], // XRP
    ...
  ],
  "i": {
    "b": 0.626195,
    "g": 0.0086846,
    "m": 3405600000000,
    "v": 96316300000
  }
}

Array values:

  • [0] - Provider ID (CoinMarketCap's internal ID) (?) - uncertain, but doesn't always match dictionary.json
  • [1] - Price in USD (float)
  • [2] - 24h change as decimal (0.0088 = +0.88%)
  • [3] - 24h volume in asset units (multiply by [1] to get volume in the quote currency)
  • [4] - Sparkline (string of digits 0-9)
  • [5] - Asset ID (per dictionary.json) - use to get symbol and name
  • [6] - Quote currency ID (1 = USD)
  • [7] - Circulating supply (0 = unknown)
  • [8] - Total supply (0 = unknown)
  • [9] - Max supply (0 = unlimited, e.g. ETH)

Global stats object i:

  • b - Bitcoin dominance (0.626195 = 62.62%)
  • g - Global market 24h change (0.0086846 = +0.87%)
  • m - Total crypto market cap in USD
  • v - Total 24h volume in USD
@Laiteux
Copy link
Author

Laiteux commented Jun 28, 2025

There are also a few more endpoints (such as graph.php with sparklines) which are not (yet) documented here. I however believe the most useful when it comes to pure market data is all here.

@Laiteux
Copy link
Author

Laiteux commented Jun 30, 2025

Reminder to sleepy selves: market cap = circulating supply * price (since it is not directly included in API)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment