/v1/healthAPI readiness + configured sources
curl -s "https://api.riddlewallet.com/v1/health"

Public API · CDN · Meta
Public XRPL market + media API for the Riddle suite (Cafe, Scanner, Wallet, DevTools). Compatible with common xrpl.to paths for tokens, NFTs, collections, and thumbs. Media is also served from the CDN host with long cache headers.
Live probes from this browser · 0/13 ok
https://api.riddlewallet.com/v1/healthhttps://cdn.riddlewallet.com/health/api/cdnhttps://cdn.riddlewallet.com/https://meta.riddlewallet.com/healthhttps://dev.riddlewallet.com/api/devtools/statushttps://api.riddlewallet.com/v1/mehttps://api.riddlewallet.com/v1/docshttps://api.riddlewallet.com/v1/docs.mdhttps://api.riddlewallet.com/docshttps://dev.riddlewallet.com/devtools/apihttps://api.riddlewallet.com/v1/tokens?limit=3&sortBy=vol24hxrp&sortType=desc/api/v1/healthClient → api.riddlewallet.com / cdn.riddlewallet.com (edge cache) → xrpl.to market index + public XRPL CDN RPC
Suite apps are free. Public free tier works without a key; production customers use X-Api-Key. Quote URLs in shells (zsh globs on ?).
# Health
curl -s "https://api.riddlewallet.com/v1/health"
# Your plan / limits (anonymous free shown without key)
curl -s "https://api.riddlewallet.com/v1/me"
# Top tokens by 24h XRP volume
curl "https://api.riddlewallet.com/v1/tokens?limit=10&sortBy=vol24hxrp&sortType=desc"
# Single token + sparkline + OHLC
curl "https://api.riddlewallet.com/v1/token/{md5}"
curl "https://api.riddlewallet.com/v1/sparkline/{md5}?period=24h"
curl "https://api.riddlewallet.com/v1/ohlc/{md5}?interval=1h&limit=72"
curl "https://api.riddlewallet.com/v1/holders/info/{md5}"
# NFT metadata + collections + account inventory
curl "https://api.riddlewallet.com/v1/nft/{NFTokenID}"
curl "https://api.riddlewallet.com/v1/nft/collections?limit=24&sort=vol24h&order=desc"
curl "https://api.riddlewallet.com/v1/nft/account/{rAddress}/nfts"
# Public XRPL JSON-RPC (read-only)
curl "https://api.riddlewallet.com/v1/xrpl?method=account_info&account=r…"
# CDN thumbs (prefer for <img>)
curl -I "https://cdn.riddlewallet.com/thumb/{md5}"
curl -I "https://cdn.riddlewallet.com/nft-thumb/{NFTokenID_or_hash}"
curl -I "https://cdn.riddlewallet.com/nft-collection-thumb/{hash}"
# Full docs
curl -s "https://api.riddlewallet.com/v1/docs"
curl -s "https://api.riddlewallet.com/v1/docs.md"GET https://api.riddlewallet.com/v1/me — suite Origin shows suite plan; send X-Api-Key for paid tiers.| Plan | USD/mo | JSON RPM | Media RPM |
|---|---|---|---|
| Free | Free | 30 | 120 |
| Bronze API | $9.99 | 120 | 600 |
| Silver API | $29.99 | 600 | 3000 |
| Gold API | $99.99 | 3000 | 15000 |
Riddle suite apps use the API free. External customers pay for API keys. Data is fetched from market indexers (xrpl.to-compatible) and cached on Riddle edge (api + cdn). · Get a key
Cache JSON 30–90s client-side. Always load images from cdn.riddlewallet.com. On 429 see Retry-After and upgrade plans in the body.
| Status | Meaning |
|---|---|
| 400 | Invalid path or parameters |
| 404 | Resource not found upstream |
| 405 | Method not allowed (GET/HEAD for market; POST allowed on /v1/xrpl) |
| 429 | Rate limited — back off and retry |
| 502 | Upstream unavailable |
Useful response headers: X-Riddle-APIX-Riddle-CacheX-Riddle-SourceX-Riddle-CDNAccess-Control-Allow-Origin
Base URL: https://api.riddlewallet.com/v1 · Style: xrpl.to /v1 · JSON · Markdown
/v1/healthAPI readiness + configured sources
curl -s "https://api.riddlewallet.com/v1/health"
/v1/meYour plan, rate limits, and pricing (suite free vs free/bronze/silver/gold API keys)
Send X-Api-Key to see paid plan; suite Origin shows suite plan
curl -s "https://api.riddlewallet.com/v1/me"
/v1/docsMachine-readable docs (this document as JSON)
curl -s "https://api.riddlewallet.com/v1/docs"
/v1/docs.mdFull documentation as Markdown
curl -s "https://api.riddlewallet.com/v1/docs.md"
/v1/tokensToken screener list / filter search
Query: limitsortBysortTypestartoffsetfiltershow_newtagName
Returns { success, total, count, tokens[] } with md5 for logos
curl -s "https://api.riddlewallet.com/v1/tokens?limit=10&sortBy=vol24hxrp&sortType=desc"
/v1/token/{md5}Full token detail by md5
curl -s "https://api.riddlewallet.com/v1/token/{32-hex-md5}"/v1/sparkline/{md5}Price sparkline series
Query: period
curl -s "https://api.riddlewallet.com/v1/sparkline/{md5}?period=24h"/v1/ohlc/{md5}OHLC candles
Query: intervallimit
curl -s "https://api.riddlewallet.com/v1/ohlc/{md5}?interval=1h&limit=72"/v1/holders/info/{md5}Holder concentration stats
curl -s "https://api.riddlewallet.com/v1/holders/info/{md5}"/v1/tagsToken tags
curl -s "https://api.riddlewallet.com/v1/tags"
/v1/xrplPublic XRPL JSON-RPC via CDN nodes (xrplcluster / Ripple s1–s2). Read-only explorer methods.
Query: methodaccounttransactionledger_indexlimit
Also POST { method, params:[{…}] }. Sources rotate across public CDNs. No API key required.
curl -s "https://api.riddlewallet.com/v1/xrpl?method=account_info&account=r…"
/v1/nft/collectionsNFT collections ranking
Query: limitsortorder
curl -s "https://api.riddlewallet.com/v1/nft/collections?limit=24&sort=vol24h&order=desc"
/v1/nft/collections/{slug}Collection detail
curl -s "https://api.riddlewallet.com/v1/nft/collections/{slug}"/v1/nft/collections/{slug}/nftsNFTs in a collection
Query: limitstart
/v1/nft/collections/{slug}/traitsCollection traits
/v1/nft/{NFTokenID}Single NFT metadata (name, image, owner, rarity…)
curl -s "https://api.riddlewallet.com/v1/nft/{64-hex-NFTokenID}"/v1/nft/{NFTokenID}/offersBuy/sell offers for an NFT
/v1/nft/account/{r-address}/nftsAccount NFT inventory (indexed)
curl -s "https://api.riddlewallet.com/v1/nft/account/rXXXX…/nfts"
/v1/nft/account/{r-address}/offersAccount NFT offers
/v1/nft/global-metricsMarket-wide NFT metrics
/v1/nft/brokers/statsBroker statistics
/v1/thumb/{md5}Token logo thumb (prefer CDN host)
CDN: https://cdn.riddlewallet.com/thumb/{md5}
curl -s "https://cdn.riddlewallet.com/thumb/{md5}"/v1/nft-thumb/{hash}NFT art thumb (prefer CDN host)
CDN: https://cdn.riddlewallet.com/nft-thumb/{hash}
curl -s "https://cdn.riddlewallet.com/nft-thumb/{NFTokenID_or_hash}"Host: https://cdn.riddlewallet.com · Prefer CDN URLs in <img> tags (long edge cache).
| Path | Use |
|---|---|
| /thumb/{md5} | Token logo |
| /nft-thumb/{hash} | NFT art |
| /nft-collection-thumb/{hash} | Collection thumb |
| /logo/{id} | Logo by id |
| /health | Health JSON |
| / | Surface map (GET https://cdn.riddlewallet.com/ (surface map)) |
Long-lived edge cache (max-age up to 1d, s-maxage up to 7d) with stale-while-revalidate. Prefer CDN URLs in <img> tags.
CORS: Access-Control-Allow-Origin: * · Types: Typically image/webp; fall through to upstream type
Ledger RPC CDNs used by /v1/xrpl: https://xrplcluster.com · https://s1.ripple.com:51234 · https://s2.ripple.com:51234
<!-- Always use CDN for images -->
<img src="https://cdn.riddlewallet.com/thumb/{md5}" width="32" height="32" alt="" />
<img src="https://cdn.riddlewallet.com/nft-thumb/{NFTokenID}" alt="" loading="lazy" />
<img src="https://cdn.riddlewallet.com/nft-collection-thumb/{hash}" alt="" loading="lazy" />const API = "https://api.riddlewallet.com/v1";
const CDN = "https://cdn.riddlewallet.com";
// Token screener
const { tokens } = await fetch(
`${API}/tokens?limit=48&sortBy=vol24hxrp&sortType=desc`
).then((r) => r.json());
// NFT metadata
const nft = await fetch(`${API}/nft/${nftId}`).then((r) => r.json());
// Prefer CDN for images (long edge cache)
const logoUrl = `${CDN}/thumb/${md5}`;
const artUrl = `${CDN}/nft-thumb/${nftId}`;const API = "https://api.riddlewallet.com/v1" as const;
const CDN = "https://cdn.riddlewallet.com" as const;
type TokensResponse = {
success?: boolean;
count?: number;
tokens?: Array<{ md5?: string; currency?: string; issuer?: string }>;
};
export async function loadTopTokens(limit = 48): Promise<TokensResponse> {
const res = await fetch(
`${API}/tokens?limit=${limit}&sortBy=vol24hxrp&sortType=desc`,
{ headers: { Accept: "application/json" } }
);
if (!res.ok) throw new Error(`Market API ${res.status}`);
return res.json();
}
export function tokenLogoUrl(md5: string): string {
return `${CDN}/thumb/${md5}`;
}
export function nftThumbUrl(idOrHash: string): string {
return `${CDN}/nft-thumb/${idOrHash}`;
}function TokenLogo({ md5, alt }: { md5: string; alt?: string }) {
return (
<img
src={`https://cdn.riddlewallet.com/thumb/${md5}`}
alt={alt || ""}
width={32}
height={32}
loading="lazy"
referrerPolicy="no-referrer"
/>
);
}Health-backed links first (verified targets). App shells below.
Paths mirror common market reads. Responses are proxied from trusted upstream indexers with edge caching. Write/auth endpoints are not exposed on this public API.