Reference
Identifiers, md5 generation, patterns and the conventions every response follows.
Token identifiers
Every {id} parameter accepts any of these.
| Format | Description |
|---|---|
| md5 | 32-char hex hash |
| slug | issuer-currency (e.g. rhcyBrowwApgNonehKBj8Po5z4gTyRknaU-VGB) |
| issuer_currency | issuer_currencyHex (40-char hex currency, underscore separator) |
| mpt | mpt-<48-char mptIssuanceID> (MPT slug form) |
| xrp | Native XRP: use the literal "XRP" (or its canonical md5 84e5efeb89c4eae8f68188982dc290d8). Works everywhere a token {id} is accepted, e.g. /token/XRP, /stats/rates?token1=XRP&token2={md5}, /ohlc/XRP. |
MD5 generation
// md5 of issuer + "_" + currency (3-character code or 40-character hex)
// JavaScript (Node)
require('crypto').createHash('md5').update(`${issuer}_${currency}`).digest('hex');
// Python
hashlib.md5(f"{issuer}_{currency}".encode()).hexdigest()
// rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz_534F4C4F00000000000000000000000000000000
// → 0413ca7cfc258dfaf698c02fe304e607Currency hex
Currency codes longer than 3 characters are stored as 40-character hex.
Patterns
| Value | Pattern |
|---|---|
| md5 | ^[a-f0-9]{32}$ |
| account | ^r[1-9A-HJ-NP-Za-km-z]{24,34}$ |
| NFTokenID | 64-char hex |
| tx hash | 64-char hex |
Conventions
| Topic | Rule |
|---|---|
| took | Server-side processing time: integer MILLISECONDS as a JSON number, on every endpoint. Excludes network transfer. |
| countAndTotal | One meaning everywhere: count = rows in THIS response; total (also pagination.total / meta.total) = rows matching the query pre-pagination. Exception: on single-resource + metrics responses (/stats, /stats/rates, /token/{id}), the envelope's total is the count of all indexed tokens — a platform stat, not pagination. A few older endpoints use length; its meaning is stated per endpoint. |
| clamping | Out-of-range numeric params are clamped, not rejected (limit above max -> max, negative offset -> 0, non-numeric -> default); the effective value is echoed in the response. Invalid enum values fall back to the documented default (e.g. an unknown range/interval/sort). An unknown tag returns 200 with 0 rows and empty tagName — check tagName to distinguish a typo from genuinely no data. |
| numericStrings | Very-high-precision amounts (amount, supply, usd, exch on some endpoints, sparkline prices) are serialized as STRINGS on purpose — XRPL token amounts exceed IEEE-754 float precision. Parse with a decimal library if you need exact math. |
| timestamps | Unix milliseconds (13 digits) unless a field is explicitly documented otherwise. |
| attribution | Successful responses on the tiers that pay nothing (anonymous, free, partner) carry an `attribution` string right after `success`, restating the requirement in usagePolicy. It is informational — safe to ignore in code, but not optional to comply with. Paid tiers omit it and owe the same attribution. |
| caching | Responses are live. When one carries a Cache-Control header, honour it. |