{"openapi":"3.1.0","info":{"title":"XRPL.to API","description":"XRPL token analytics, market data, NFT, trading, and on-chain account API.\n\n## Usage policy\n\nApplies to every caller — no key, Free, and every paid tier alike.\n\n- **Attribution is required.** Any app, website, bot, or dashboard that displays xrpl.to data must show a visible, clickable credit to xrpl.to on the same screen as that data — not buried in an about page. Use: `<a href=\"https://xrpl.to\" target=\"_blank\" rel=\"noopener\">Data by xrpl.to</a>`\n- **Redistribution needs permission.** Storing our data and re-serving it from your own API, dataset, or public dashboard requires written permission first. Email hello@xrpl.to — the answer is usually yes, we just need to know who is doing it.\n- **Indexers and aggregators:** use the paginated list endpoints instead of looping one item at a time, cache what you fetch, and honour `Retry-After` on a 429 — a repeated 429 means back off, not retry. Get a key rather than running anonymous so we can raise your limits instead of blocking you.\n- **Partner tier** (invitation-only, free): 100 req/sec, 20M credits/mo, direct support — for integrations that credit us properly. Email hello@xrpl.to or DM @xrplto on X.\n\nSuccessful responses on the tiers that pay nothing (anonymous, free, partner) carry an `attribution` string right after `success`, restating this requirement. It is informational — safe to ignore in code, but not optional to comply with.","version":"1.20","contact":{"name":"XRPL.to","url":"https://xrpl.to"}},"servers":[{"url":"https://api.xrpl.to/v1","description":"Production (canonical)"},{"url":"https://api.xrpl.to/api","description":"Production (alias — identical API, prefer /v1)"}],"tags":[{"name":"Account"},{"name":"Account Tx Explain"},{"name":"Analytics"},{"name":"Boost"},{"name":"Bridge"},{"name":"Charts & Analytics"},{"name":"Chat"},{"name":"Creator Activity"},{"name":"Embed"},{"name":"Keys"},{"name":"Launch"},{"name":"Ledger & Tx"},{"name":"LP Positions"},{"name":"Mentions"},{"name":"News"},{"name":"NFT"},{"name":"Platform Report"},{"name":"Platform Stats"},{"name":"Promotion"},{"name":"Referral"},{"name":"Scams"},{"name":"Submit"},{"name":"Thumbnails"},{"name":"Token Flow"},{"name":"Token Review"},{"name":"Tokens"},{"name":"Traders"},{"name":"Trading"},{"name":"Tweet Verify"},{"name":"Tx Explain"},{"name":"User"},{"name":"Utilities"},{"name":"Verify"},{"name":"Web Search"},{"name":"Xaman","description":"Xaman (XUMM) sign-request bridge: create a sign request, poll its status, cancel it"},{"name":"Presale","description":"Escrow-based token presales"},{"name":"Testnet","description":"What the Testnet collectors gathered from the XRP Ledger Testnet (testnet_v1): tokens, trust lines, offers, trades, 5-minute candles, accounts, AMM pools, NFTs, NFT offers, collections and history. Keyless, index-backed, disposable data that a Testnet reset wipes and the collectors rebuild."}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key"},"WalletSignature":{"type":"apiKey","in":"header","name":"X-Signature","description":"Send X-Wallet, X-Timestamp, X-Signature, X-Public-Key headers."},"AdminKey":{"type":"apiKey","in":"header","name":"X-Admin-Key"}}},"paths":{"/tokens":{"get":{"tags":["Tokens"],"summary":"List all tokens with metrics","operationId":"get_tokens","parameters":[{"name":"limit","in":"query","required":false,"description":"int (max 100; default 100, or 50 with tag/filter/filterNe, 20 with sort=assessmentScore|pro5m|trendingScore)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"token field name: vol24hxrp|marketcap|pro5m|pro1h|pro24h|pro7d|exch|holders|tvl|trendingScore|assessmentScore|dateon (unknown field = no-op)","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc (default: desc)","schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"description":"filter by tag (see /tags, case-insensitive)","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"description":"text search on token name","schema":{"type":"string"}},{"name":"watchlist","in":"query","required":false,"description":"watchlist owner account (r-address) — filters to that account's watchlist tokens","schema":{"type":"string"}},{"name":"show_new","in":"query","required":false,"description":"bool - only tokens created in the last 7 days","schema":{"type":"boolean"}},{"name":"show_slug","in":"query","required":false,"description":"bool - only tokens whose slug equals their md5","schema":{"type":"boolean"}},{"name":"show_date","in":"query","required":false,"description":"bool - only tokens with missing/unknown date","schema":{"type":"boolean"}},{"name":"tags","in":"query","required":false,"description":"yes - include tags array","schema":{"type":"string"}},{"name":"token_type","in":"query","required":false,"description":"trustline|lp|mpt|xls14|demurrage|nonstandard (invalid value = no filter, echoed back as token_type: null)","schema":{"type":"string"}},{"name":"skip_metrics","in":"query","required":false,"description":"bool - skip the global metrics envelope (exch/H24/global) — combine with lightweight for the smallest payload","schema":{"type":"boolean"}},{"name":"lightweight","in":"query","required":false,"description":"bool - strip each token to ~50 essential fields (~77% smaller per token; see tokenFields)","schema":{"type":"boolean"}},{"name":"filterNe","in":"query","required":false,"description":"text - exclude matching tokens (negative filter)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took (integer ms), total (tokens matching the query, pre-pagination), count (tokens in this response), start, limit, tagName, sortBy, sortType, tokens[], exch, H24, global (metrics omitted when skip_metrics=true) }"}}}}}}},"/tokens/slugs":{"get":{"tags":["Tokens"],"summary":"All token slugs","operationId":"get_tokens_slugs","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, count, total, truncated, slugs[] }"}}}}},"parameters":[]}},"/token/{id}":{"get":{"tags":["Tokens"],"summary":"Single token by id (see tokenFields for the token object dictionary)","operationId":"get_token_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"desc","in":"query","required":false,"description":"yes - include description","schema":{"type":"string"}},{"name":"skip_metrics","in":"query","required":false,"description":"bool - omit the global metrics envelope (exch/total/H24/global)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, total, exch, H24, global, token }"}}}}}}},"/search":{"post":{"tags":["Tokens"],"summary":"Search tokens, NFTs, collections, and accounts. limit max 100; offset clamped so offset+limit <= 100","operationId":"post_search","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, tokens[], collections[], nfts[], account (set when search is an r-address), pagination: { offset, limit, total, hasMore, maxResults: 100 } }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ search, offset?, limit? }"}}}},"parameters":[]}},"/tags":{"get":{"tags":["Tokens"],"summary":"List all token tags","operationId":"get_tags","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, exch, H24, global, tags }"}}}}},"parameters":[]}},"/token/{md5}/metadata":{"post":{"tags":["Tokens"],"summary":"Update token metadata. 3s per-token write cooldown.","operationId":"post_token_md5_metadata","description":"Auth: wallet signature (token creator/issuer or admin)","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, updated[] }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ user?, domain?, whitepaper?, description?, social?, tags? (max 15; origin/launchpad tags admin-only), linkedCollections? (max 10) }"}}}},"security":[{"WalletSignature":[]}]}},"/token/{md5}/image":{"post":{"tags":["Tokens"],"summary":"Upload token logo image. 3s per-token write cooldown.","operationId":"post_token_md5_image","description":"Auth: wallet signature (token creator/issuer or admin)","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, md5, imgUpdated }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ imageData: base64 PNG/JPEG/GIF/WebP (max ~650KB decoded) }"}}}},"security":[{"WalletSignature":[]}]}},"/ohlc/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"OHLC candlestick data","operationId":"get_ohlc_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"1D|5D|7D|1M|3M|1Y|5Y|ALL","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"1m|5m|15m|30m|1h|2h|4h|1d|1w","schema":{"type":"string"}},{"name":"vs_currency","in":"query","required":false,"description":"XRP|USD|EUR|JPY|CNH (default: XRP)","schema":{"type":"string"}},{"name":"resolution","in":"query","required":false,"description":"int (minutes), or D|W","schema":{"type":"integer"}},{"name":"cb","in":"query","required":false,"description":"int (candle bar count, max 5000)","schema":{"type":"integer"}},{"name":"invert","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, length, format, resolution, interval, interval_seconds, vs_currency, inverted, base_interval, preAgg?, ohlc: [[time, open, high, low, close, volume, ...]] }"}}}}}}},"/sparkline/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Price sparkline","operationId":"get_sparkline_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d (default: 7d)","schema":{"type":"string"}},{"name":"vs_currency","in":"query","required":false,"description":"XRP|USD (default: XRP)","schema":{"type":"string"}},{"name":"lightweight","in":"query","required":false,"description":"bool - sample data points","schema":{"type":"boolean"}},{"name":"max_points","in":"query","required":false,"description":"int (default: 20, range 2-500; only applies when lightweight=true)","schema":{"type":"integer"}},{"name":"pro24h","in":"query","required":false,"description":"float - override percentChange/chartColor when period=24h","schema":{"type":"number"}},{"name":"pro7d","in":"query","required":false,"description":"float - override when period=7d","schema":{"type":"number"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, chartColor, period, percentChange, lightweight, vsCurrency, data: { prices[], timestamps[], max, min } }"}}}}}}},"/holders/info/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Holder concentration (top10/20/50/100 %)","operationId":"get_holders_info_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, richInfo: { time, length, holders, top10, top20, top50, top100, active24H } }"}}}}}}},"/holders/graph/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Holder count history","operationId":"get_holders_graph_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"1D|7D|1M|3M|1Y|5Y|ALL (default: 7D)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, length, history[] }"}}}}}}},"/holders/list/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Paginated holder richlist with acquisition tracking","operationId":"get_holders_list_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default: 20, max 200)","schema":{"type":"integer"}},{"name":"freeze","in":"query","required":false,"description":"bool - only frozen trustlines","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"balance|value|holding|percent|change24h|pnl (value/percent are balance/holding aliases; default: balance desc)","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"account address (min 3 chars)","schema":{"type":"string"}},{"name":"minBalance","in":"query","required":false,"description":"float - min balance (token units)","schema":{"type":"number"}},{"name":"maxBalance","in":"query","required":false,"description":"float - max balance (token units)","schema":{"type":"number"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, summary: { top10Hold, top20Hold, top50Hold, top100Hold, frozen }, length (total holders; filtered count when search/minBalance/maxBalance set), richList[]: { account, balance, holding, rank, freeze, frozenByIssuer?, isCreator, xrpBalance, lastActive, name, domain, funder, tradedPct?, tradeCount?, source?, acquisition?, isAMM? } }"}}}}}}},"/rsi":{"get":{"tags":["Charts & Analytics"],"summary":"RSI indicator data","operationId":"get_rsi","parameters":[{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"rsi15m|rsi1h|rsi4h|rsi24h|rsi7d|rsi30d|rsi90d|marketcap|vol24hxrp|pro24h|pro7d|pro30d|holders|tvl|uniqueTraders24h (default: rsi24h; invalid values fall back)","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"timeframe","in":"query","required":false,"description":"15m|1h|4h|24h|7d|30d|90d","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"description":"text search","schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"origin","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"minMarketCap","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxMarketCap","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minVolume24h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxVolume24h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minPriceChange24h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxPriceChange24h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi15m","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi15m","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi1h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi1h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi4h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi4h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi24h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi24h","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi7d","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi7d","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi30d","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi30d","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minRsi90d","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"maxRsi90d","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"activeOnly","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"minHolders","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"minTVL","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"excludeNeutral","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"minUniqueTraders","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, timeframe, sort, order, filters, tokens[], count, total, start, limit, cached? }"}}}}}}},"/stats":{"get":{"tags":["Charts & Analytics"],"summary":"Platform metrics","operationId":"get_stats","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, total, exch, H24, global }"}}}}},"parameters":[]}},"/stats/rates":{"get":{"tags":["Charts & Analytics"],"summary":"Exchange rates between tokens","operationId":"get_stats_rates","parameters":[{"name":"token1","in":"query","required":false,"description":"token id","schema":{"type":"string"}},{"name":"token2","in":"query","required":false,"description":"token id","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, total, exch, H24, global, rate1, rate2 }"}}}}}}},"/stats/metrics":{"post":{"tags":["Charts & Analytics"],"summary":"Historical exchange rates by timestamps (XRP base)","operationId":"post_stats_metrics","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, length, history[]: { timestamp, XRP (USD price), USD (XRP per 1 USD), EUR (XRP per 1 EUR), JPY (XRP per 1 JPY), CNY (XRP per 1 CNY) } }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ timestamps: [unix_ms, ...] }"}}}},"parameters":[]}},"/stats/marketcap-history":{"get":{"tags":["Charts & Analytics"],"summary":"Daily OMCF-filtered marketcap (same as homepage gMarketcap) back to 2021-09-26","operationId":"get_stats_marketcap_history","parameters":[{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD (required)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD (optional, default today)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, from, to, length, history[]: { date, gMarketcap (XRP, filtered), unfilteredMarketcap (XRP, incl. illiquid), tokenCount } }"}}}}}}},"/holders/ranks/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Bulk account-to-rank lookup within the holder richlist","operationId":"get_holders_ranks_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"accounts","in":"query","required":false,"description":"comma-separated r-addresses (max 200)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, ranks: { account: rank|null }, total, source: redis|mongo }"}}}}}}},"/holders/position/{id}/{address}":{"get":{"tags":["Charts & Analytics"],"summary":"One account's stake in a token — balance, share of supply and rank, without building the holder list","operationId":"get_holders_position_id_address","parameters":[{"name":"id","in":"path","required":true,"description":"Token md5, slug or issuer_currency","schema":{"type":"string"}},{"name":"address","in":"path","required":true,"description":"XRPL r-address (exact match)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, account, md5, balance, holding (% of supply, 2dp rounded down - same figure as /holders/list), rank (null until the worker ranks the token), holders }"}}}}}}},"/sparkline/batch":{"get":{"tags":["Charts & Analytics"],"summary":"Batch sparklines for multiple tokens (cached 30s)","operationId":"get_sparkline_batch","parameters":[{"name":"md5s","in":"query","required":false,"description":"comma-separated md5 hashes (required, max 100)","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d (default: 7d)","schema":{"type":"string"}},{"name":"maxPoints","in":"query","required":false,"description":"int (default: 50, range 2-500)","schema":{"type":"integer"}},{"name":"vs_currency","in":"query","required":false,"description":"XRP|USD (default: XRP)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ sparklines: { <md5>: [price, ...] } }"}}}}}}},"/holders/empty/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Zero-balance trustlines (dust/airdrop accounts; precomputed bot accounts excluded)","operationId":"get_holders_empty_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (1-1000; omit to return the full list)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (default: 0, only with limit)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, accounts[], count, total, excluded, offset?, limit? }"}}}}}}},"/history":{"get":{"tags":["Trading"],"summary":"Trade history by token, account, or both","operationId":"get_history","description":"Offset pagination capped at 100k rows (meta.truncated: true, total capped to servable window; use cursor for deeper history). Trades carry sourceTag (numeric, on-chain SourceTag) and/or platform (canonical name for memo-identified platforms, e.g. SPYDEX)","parameters":[{"name":"md5","in":"query","required":false,"description":"token id (optional if account provided)","schema":{"type":"string"}},{"name":"account","in":"query","required":false,"description":"r-address","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 1000)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"start_time","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}},{"name":"end_time","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"trades|liquidity|all (default: trades)","schema":{"type":"string"}},{"name":"liquidity_type","in":"query","required":false,"description":"create|deposit|withdraw","schema":{"type":"string"}},{"name":"pair_type","in":"query","required":false,"description":"xrp|token","schema":{"type":"string"}},{"name":"xrp_only","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"xrp_amount","in":"query","required":false,"description":"float (min XRP threshold)","schema":{"type":"number"}},{"name":"cursor","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"direction","in":"query","required":false,"description":"asc|desc (default: desc)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, data[], meta: { total, offset, limit, direction, nextCursor, hasMore, truncated?, timeRange } }"}}}}}}},"/amm":{"get":{"tags":["Trading"],"summary":"List AMM pools","operationId":"get_amm","parameters":[{"name":"sort","in":"query","required":false,"description":"fees|apy|liquidity|volume|created","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"active|all","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"token","in":"query","required":false,"description":"token id","schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"description":"currency code filter","schema":{"type":"string"}},{"name":"issuer","in":"query","required":false,"description":"issuer address filter","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/amm/info":{"get":{"tags":["Trading"],"summary":"Live AMM pool info","operationId":"get_amm_info","parameters":[{"name":"amm_account","in":"query","required":false,"description":"AMM account address","schema":{"type":"string"}},{"name":"asset","in":"query","required":false,"description":"XRP | token id","schema":{"type":"string"}},{"name":"asset2","in":"query","required":false,"description":"XRP | token id","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/amm/liquidity-chart":{"get":{"tags":["Trading"],"summary":"Historical TVL chart data","operationId":"get_amm_liquidity_chart","parameters":[{"name":"token","in":"query","required":false,"description":"token id","schema":{"type":"string"}},{"name":"token2","in":"query","required":false,"description":"token id","schema":{"type":"string"}},{"name":"ammAccount","in":"query","required":false,"description":"address","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"1d|5d|1w|1m|3m|6m|1y|5y|all","schema":{"type":"string"}},{"name":"poolType","in":"query","required":false,"description":"xrp|token|all","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/pairs":{"get":{"tags":["Trading"],"summary":"Trading pairs for a token","operationId":"get_pairs","parameters":[{"name":"md5","in":"query","required":false,"description":"token id (required)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, count, limit: 100, truncated, pairs[] }"}}}}}}},"/orderbook":{"get":{"tags":["Trading"],"summary":"Live DEX orderbook","operationId":"get_orderbook","parameters":[{"name":"base","in":"query","required":false,"description":"token id","schema":{"type":"string"}},{"name":"quote","in":"query","required":false,"description":"token id","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 400, default 20)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, pair, base, quote, bids[], asks[], ledger_index (falls back to ledger_current_index) }"}}}}}}},"/dex/quote":{"post":{"tags":["Trading"],"summary":"Get swap quote with routing / path finding (successor to POST /account/path-find). Exact-output via destination_value, or exact-input via source_value","operationId":"post_dex_quote","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ status, took, requiresTrustline, quote: { source_amount, destination_amount, execution_rate, price_impact, amm_price_change, warnings[] (with a destination_account also recipient_no_trustline | recipient_not_authorized | recipient_line_frozen | recipient_limit_low | recipient_unverified — each means the Payment would fail), destination_account (echoed when it differs from source_account), paths_count }, alternatives[] }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ source_account, destination_token, destination_value, source_token?, slippage?, destination_account? (Payment Destination when the output goes to another account) }"}}}},"parameters":[]}},"/pairs/{id}":{"get":{"tags":["Trading"],"summary":"Trading pairs for a specific token","operationId":"get_pairs_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, count, limit: 100, truncated, pairs[] }"}}}}}}},"/account/balance/{account}":{"get":{"tags":["Account"],"summary":"XRP balance with reserves","operationId":"get_account_balance_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"simple","in":"query","required":false,"description":"bool - minimal response","schema":{"type":"boolean"}},{"name":"rank","in":"query","required":false,"description":"bool - include rank (slow)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ balance, total, balanceDrops, spendableDrops, ownerCount, sequence, flags, reserve, reserveDrops, name, inception, parent, rank? }"}}}}}}},"/account/balance":{"post":{"tags":["Account"],"summary":"Batch balance lookup (max 100)","operationId":"post_account_balance","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, count, data[]: { account, balance (spendable after reserves), total } }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ accounts[] }"}}}},"parameters":[]}},"/account/balance/pair/{account}":{"get":{"tags":["Account"],"summary":"Token pair balances","operationId":"get_account_balance_pair_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"curr1","in":"query","required":false,"description":"currency","schema":{"type":"string"}},{"name":"issuer1","in":"query","required":false,"description":"issuer","schema":{"type":"string"}},{"name":"curr2","in":"query","required":false,"description":"currency","schema":{"type":"string"}},{"name":"issuer2","in":"query","required":false,"description":"issuer","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/offers/{account}":{"get":{"tags":["Account"],"summary":"Open DEX offers","operationId":"get_account_offers_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"pair","in":"query","required":false,"description":"pair hash","schema":{"type":"string"}},{"name":"md5","in":"query","required":false,"description":"token id (filters offers to that token)","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int (snaps down to a limit-multiple; effective offset echoed)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (1-50, default 10; out-of-range resets to 10)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, offset, limit, total, offers[] }"}}}}}}},"/account/tx/{account}":{"get":{"tags":["Account"],"summary":"Full transaction history","operationId":"get_account_tx_account","description":"Own rate window: 20 requests/min per IP on Free, 5/min without a key, more on paid tiers (see rateLimits.layers.perEndpoint)","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (1-200, default 200)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"JSON string (URL-encoded), e.g. {\"ledger\":N,\"seq\":M}","schema":{"type":"string"}},{"name":"types","in":"query","required":false,"description":"comma-separated TransactionTypes","schema":{"type":"string"}},{"name":"forward","in":"query","required":false,"description":"bool (default: false)","schema":{"type":"boolean"}},{"name":"ledgerMin","in":"query","required":false,"description":"int - ledger index lower bound","schema":{"type":"integer"}},{"name":"ledgerMax","in":"query","required":false,"description":"int - ledger index upper bound","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, count, hasMore, marker, txs[] }"}}}}}}},"/account/info/{account}":{"get":{"tags":["Account"],"summary":"Account info with DB enrichment","operationId":"get_account_info_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/trustlines/{account}":{"get":{"tags":["Account"],"summary":"Account trustlines","operationId":"get_account_trustlines_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 400)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"peer","in":"query","required":false,"description":"r-address (filter to single counterparty)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/trustline/{account}/{issuer}/{currency}":{"get":{"tags":["Account"],"summary":"Single trustline lookup","operationId":"get_account_trustline_account_issuer_currency","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"issuer","in":"path","required":true,"schema":{"type":"string"}},{"name":"currency","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/objects/{account}":{"get":{"tags":["Account"],"summary":"Account objects","operationId":"get_account_objects_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"offer|escrow|check|nft_offer|...","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 400)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/currencies/{account}":{"get":{"tags":["Account"],"summary":"Sendable/receivable currencies","operationId":"get_account_currencies_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/nfts/{account}":{"get":{"tags":["Account"],"summary":"NFTs owned by account","operationId":"get_account_nfts_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 400)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/gateway/{account}":{"get":{"tags":["Account"],"summary":"Gateway balances (issuer totals)","operationId":"get_account_gateway_account","description":"Returns 503 \"Account too large, retry shortly\" on issuer-scale timeouts","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"hotwallet","in":"query","required":false,"description":"comma-separated addresses","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/noripple/{account}":{"get":{"tags":["Account"],"summary":"NoRipple check","operationId":"get_account_noripple_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"role","in":"query","required":false,"description":"gateway|user","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/channels/{account}":{"get":{"tags":["Account"],"summary":"Payment channels","operationId":"get_account_channels_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"destination","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 400)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/deposit-authorized":{"get":{"tags":["Account"],"summary":"Check deposit authorization","operationId":"get_account_deposit_authorized","parameters":[{"name":"source","in":"query","required":false,"description":"r-address","schema":{"type":"string"}},{"name":"destination","in":"query","required":false,"description":"r-address","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/account/path-find":{"post":{"tags":["Account"],"summary":"Find payment paths","operationId":"post_account_path_find","description":"Rate limited 5 req/min per IP","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ source, destination, amount, source_currencies? }"}}}}}},"/account/ancestry/{account}":{"get":{"tags":["Account"],"summary":"Account ancestry tree","operationId":"get_account_ancestry_account","description":"Requires Developer tier or above (403 otherwise)","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"direction","in":"query","required":false,"description":"up|down|both","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200)","schema":{"type":"integer"}},{"name":"include_tokens","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"token_limit","in":"query","required":false,"description":"int (1-500, default 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/account/token-stats/{account}/{md5}":{"get":{"tags":["Account"],"summary":"Per-token trading stats for account","operationId":"get_account_token_stats_account_md5","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"md5","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success. holdingValue/unrealizedPnl mark the bag at the pool spot price; `exit` is what selling the whole balance returns right now through the swap engine — { xrp, impactPct (negative, execution vs spot), poolChangePct (null off-AMM), pnl (same basis as totalPnl, never above it), split } — or null for dust / no liquidity. Refreshed every 10 s."}},"description":"holdingValue/unrealizedPnl mark the bag at the pool SPOT price. `exit` is what selling the WHOLE balance returns right now through the swap engine (same fill as POST /dex/quote): { xrp (proceeds), impactPct (execution vs spot, negative), poolChangePct (pool spot after the fill, null off-AMM), pnl (P&L at that price, same basis as totalPnl — never above it), split (true when one transaction cannot fill it) }. null when the holding is dust, the pair has no liquidity, or the engine cannot price it. Refreshed every 10 s."}},"/trustlines/{account}":{"get":{"tags":["Account"],"summary":"Trustlines with token values","operationId":"get_trustlines_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int (exact, no page snapping)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (1-50, default 20; up to 2000 when sort_by_value=true)","schema":{"type":"integer"}},{"name":"format","in":"query","required":false,"description":"raw|default|full","schema":{"type":"string"}},{"name":"sort_by_value","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"search","in":"query","required":false,"description":"text - filter by currency/name/symbol","schema":{"type":"string"}},{"name":"includeZero","in":"query","required":false,"description":"bool - include zero-balance lines","schema":{"type":"boolean"}},{"name":"lightweight","in":"query","required":false,"description":"bool - strip each line’s token join to the ~30 essential fields (see tokenFields; ~90% smaller per line)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, account, accountActive, accountData, xrp, total, zeroCount, offset, limit, lines[], issued[]?, tokenCount?, totalValue?, truncated? + subsetSize? (sort_by_value on accounts >2000 lines), partial? }"}}}}}}},"/watchlist":{"get":{"tags":["Account"],"summary":"Get token watchlist","operationId":"get_watchlist","description":"Auth: wallet signature","parameters":[{"name":"account","in":"query","required":false,"description":"r-address","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]},"post":{"tags":["Account"],"summary":"Add/remove token on watchlist","operationId":"post_watchlist","description":"Auth: wallet signature","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ md5, account, action: \"add\"|\"remove\" }"}}}},"security":[{"WalletSignature":[]}],"parameters":[]}},"/watchlist/nft":{"get":{"tags":["Account"],"summary":"Get NFT watchlist","operationId":"get_watchlist_nft","description":"Auth: wallet signature","parameters":[{"name":"account","in":"query","required":false,"description":"r-address","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]},"post":{"tags":["Account"],"summary":"Add/remove NFT on watchlist","operationId":"post_watchlist_nft","description":"Auth: wallet signature","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ nftokenId, account, action: \"add\"|\"remove\" }"}}}},"security":[{"WalletSignature":[]}],"parameters":[]}},"/account/recent-trades/{account}":{"get":{"tags":["Account"],"summary":"Recent trades for an account","operationId":"get_account_recent_trades_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (1-100, default 30)","schema":{"type":"integer"}},{"name":"since","in":"query","required":false,"description":"unix ms - only trades after this time","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, account, count, trades[] }"}}}}}}},"/account/names":{"post":{"tags":["Account"],"summary":"Resolve account display names + verification status in bulk (max 50)","operationId":"post_account_names","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, names: { address: name } }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ accounts[] }"}}}},"parameters":[]}},"/account/snapshot/{account}":{"get":{"tags":["Account"],"summary":"Point-in-time XRP + token holdings valued in XRP at a historical ledger (resolve time to ledger via /ledger/at first)","operationId":"get_account_snapshot_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"ledger","in":"query","required":false,"description":"int (required) - ledger index","schema":{"type":"integer"}},{"name":"closeMs","in":"query","required":false,"description":"unix ms - close time; selects historical vs current pricing","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, account, ledger, close_time, exists, xrp, tokens[], totalXrp, truncated? + maxLines? }"}}}}}}},"/account/checks/{account}":{"get":{"tags":["Account"],"summary":"Check ledger objects with live funding status for cashable checks","operationId":"get_account_checks_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, account, objects[], truncated? }"}}}}}}},"/account/search-by-name":{"get":{"tags":["Account"],"summary":"Search accounts by display name / X profile","operationId":"get_account_search_by_name","parameters":[{"name":"q","in":"query","required":false,"description":"string (min 2 chars; name, domain, or X handle)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, resolvedName, results[] }"}}}}}}},"/ledger":{"get":{"tags":["Ledger & Tx"],"summary":"Current validated ledger info","operationId":"get_ledger","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"ledger_index":{"type":"integer"},"ledger_hash":{"type":"string"},"close_time":{"type":"integer","description":"Unix ms"},"close_time_human":{"type":"string"},"parent_hash":{"type":"string"},"total_coins":{"type":"string"},"txn_count":{"type":"integer"},"validated":{"type":"boolean"},"reserve_base_drops":{"type":"integer","nullable":true,"description":"Base account reserve, drops"},"reserve_inc_drops":{"type":"integer","nullable":true,"description":"Owner reserve increment, drops. Required Fee for AccountDelete / AMMCreate."}}}}}}},"description":"reserve_base_drops / reserve_inc_drops are the validator-voted account reserve settings, in drops. reserve_inc_drops is the Fee an AccountDelete or AMMCreate MUST carry (one owner reserve) — read it here, never hardcode it: validators can vote the increment, and a stale constant means telINSUF_FEE_P if it rose or a silent overpayment if it fell.","parameters":[]}},"/ledger/{index}":{"get":{"tags":["Ledger & Tx"],"summary":"Ledger by index with transactions","operationId":"get_ledger_index","parameters":[{"name":"index","in":"path","required":true,"schema":{"type":"string"},"description":"ledger index or: validated|closed|current"},{"name":"transactions","in":"query","required":false,"description":"bool (default: true)","schema":{"type":"boolean"}},{"name":"expand","in":"query","required":false,"description":"bool (default: false)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/ledger/entry":{"get":{"tags":["Ledger & Tx"],"summary":"Fetch specific ledger object","operationId":"get_ledger_entry","description":"Malformed JSON in object params returns 400","parameters":[{"name":"index","in":"query","required":false,"description":"entry index","schema":{"type":"string"}},{"name":"account_root","in":"query","required":false,"description":"address","schema":{"type":"string"}},{"name":"offer","in":"query","required":false,"description":"JSON { account, seq }","schema":{"type":"string"}},{"name":"amm","in":"query","required":false,"description":"JSON { asset, asset2 }","schema":{"type":"string"}},{"name":"check","in":"query","required":false,"description":"ID","schema":{"type":"string"}},{"name":"escrow","in":"query","required":false,"description":"JSON { owner, seq }","schema":{"type":"string"}},{"name":"directory","in":"query","required":false,"description":"JSON { dir_root | owner, sub_index? } or plain 64-hex index","schema":{"type":"string"}},{"name":"payment_channel","in":"query","required":false,"description":"ID","schema":{"type":"string"}},{"name":"deposit_preauth","in":"query","required":false,"description":"JSON { owner, authorized }","schema":{"type":"string"}},{"name":"ticket","in":"query","required":false,"description":"JSON { account, ticket_seq }","schema":{"type":"string"}},{"name":"nft_page","in":"query","required":false,"description":"index","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/tx/{hash}":{"get":{"tags":["Ledger & Tx"],"summary":"Transaction by hash (64-char hex)","operationId":"get_tx_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/ledger/at":{"get":{"tags":["Ledger & Tx"],"summary":"Resolve a datetime to the last ledger closed at or before it (binary search)","operationId":"get_ledger_at","parameters":[{"name":"time","in":"query","required":false,"description":"unix ms or ISO date (required)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ ledger_index, close_time, clampedToHead?, clampedToGenesis? }"}}}}}}},"/submit":{"post":{"tags":["Submit"],"summary":"Submit signed transaction","operationId":"post_submit","description":"Duplicate tx_blob within 30s returns 409","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, engine_result, engine_result_code, engine_result_message, tx_json, hash, accepted, applied, broadcast, kept, queued }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ tx_blob, fail_hard? }"}}}},"parameters":[]}},"/submit/preview":{"post":{"tags":["Submit"],"summary":"Dry-run transaction preview (400 on invalid tx input); sender_after = simulated sender position {balance, reserve, spendable}, null when no sender AccountRoot change","operationId":"post_submit_preview","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, engine_result, engine_result_message, meta, tx_json, sender_after }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ tx_json } or { tx_blob }"}}}},"parameters":[]}},"/submit/types":{"get":{"tags":["Submit"],"summary":"Every transaction type POST /submit relays, each with an example: examples[type] = { json (the reference example, unsigned), txid (a real Mainnet transaction of that type, when the reference names one), summary }","operationId":"get_submit_types","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, types[], pool_size }"}}}}},"parameters":[]}},"/submit/fee":{"get":{"tags":["Submit"],"summary":"Current network fees","operationId":"get_submit_fee","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, base_fee, median_fee, minimum_fee, open_ledger_fee, current_ledger, current_queue_size, max_queue_size }"}}}}},"parameters":[]}},"/submit/account/{address}/sequence":{"get":{"tags":["Submit"],"summary":"Account sequence number","operationId":"get_submit_account_address_sequence","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, sequence, ledger_index, balance, ownerCount, flags, regularKey, cached? }"}}}}}}},"/submit/account/{address}/inbound-tags":{"get":{"tags":["Submit"],"summary":"Destination-tag usage of recent inbound payments (send-screening advisory; tagsExpected = recent deposits overwhelmingly tagged)","operationId":"get_submit_account_address_inbound_tags","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, account, sampleSize, tagged, taggedPct, distinctSenders, tagsExpected }"}}}}}}},"/submit/tx/{hash}":{"get":{"tags":["Submit"],"summary":"Lookup a submitted XRPL transaction by hash","operationId":"get_submit_tx_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/submit/ledger-entry/check/{checkId}":{"get":{"tags":["Submit"],"summary":"Lookup a Check ledger entry by id","operationId":"get_submit_ledger_entry_check_checkId","parameters":[{"name":"checkId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft":{"get":{"tags":["NFT"],"summary":"List NFTs","operationId":"get_nft","parameters":[{"name":"cid","in":"query","required":false,"description":"collection id","schema":{"type":"string"}},{"name":"issuer","in":"query","required":false,"description":"address","schema":{"type":"string"}},{"name":"taxon","in":"query","required":false,"description":"int (NFTokenTaxon; requires issuer)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (>=0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 20; response echoes effective limit)","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"created|time|rarity_rank|volume|cost.amount","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/{nftId}":{"get":{"tags":["NFT"],"summary":"NFT by NFTokenID (64-char hex)","operationId":"get_nft_nftId","parameters":[{"name":"nftId","in":"path","required":true,"schema":{"type":"string"}},{"name":"includeCollection","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/nft/{nftId}/offers":{"get":{"tags":["NFT"],"summary":"Buy/sell offers for NFT","operationId":"get_nft_nftId_offers","parameters":[{"name":"nftId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/history":{"get":{"tags":["NFT"],"summary":"NFT transaction history","operationId":"get_nft_history","parameters":[{"name":"NFTokenID","in":"query","required":false,"description":"64-char hex","schema":{"type":"string"}},{"name":"account","in":"query","required":false,"description":"r-address","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200; up to 50 ownership events past the limit, such as sales and transfers, are included too)","schema":{"type":"integer"}},{"name":"types","in":"query","required":false,"description":"comma-separated: SALE|MINT|BURN|TRANSFER|CREATE_BUY_OFFER|CANCEL_BUY_OFFER|CREATE_SELL_OFFER|CANCEL_SELL_OFFER|ACCEPT_OFFER","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/history/{nftId}":{"get":{"tags":["NFT"],"summary":"Live NFT history","operationId":"get_nft_history_nftId","parameters":[{"name":"nftId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/activity":{"get":{"tags":["NFT"],"summary":"Recent NFT activity feed","operationId":"get_nft_activity","parameters":[{"name":"cid","in":"query","required":false,"description":"collection id","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/transactions/{hash}":{"get":{"tags":["NFT"],"summary":"NFT transaction by hash","operationId":"get_nft_transactions_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/offers/buy/{nftId}":{"get":{"tags":["NFT"],"summary":"Live buy offers","operationId":"get_nft_offers_buy_nftId","parameters":[{"name":"nftId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 500)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/offers/sell/{nftId}":{"get":{"tags":["NFT"],"summary":"Live sell offers","operationId":"get_nft_offers_sell_nftId","parameters":[{"name":"nftId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 500)","schema":{"type":"integer"}},{"name":"marker","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections":{"get":{"tags":["NFT"],"summary":"List NFT collections","operationId":"get_nft_collections","parameters":[{"name":"sort","in":"query","required":false,"description":"vol24h|totalVol24h|volume|new|created|latest|trendingScore (or any collection field)","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"24h|7d|30d (default 24h) — trending window; with sort=trendingScore ranks by the 7d/30d score","schema":{"type":"string"}},{"name":"lightweight","in":"query","required":false,"description":"bool — strip each collection to the essential discover/trending fields","schema":{"type":"boolean"}},{"name":"skip_metrics","in":"query","required":false,"description":"bool — omit the tags/countries facets","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (>=0)","schema":{"type":"integer"}},{"name":"tag","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"origin","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"minOwners","in":"query","required":false,"description":"int (>=0, default 0) — only collections held by at least this many distinct owners","schema":{"type":"integer"}},{"name":"includeGlobalMetrics","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}":{"get":{"tags":["NFT"],"summary":"Collection details","operationId":"get_nft_collections_slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"includeNFTs","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"nftLimit","in":"query","required":false,"description":"int (max 100, default 20)","schema":{"type":"integer"}},{"name":"nftSort","in":"query","required":false,"description":"created|time|rarity_rank|volume|cost.amount","schema":{"type":"string"}},{"name":"nftOrder","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/nfts":{"get":{"tags":["NFT"],"summary":"NFTs in collection","operationId":"get_nft_collections_slug_nfts","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"sort","in":"query","required":false,"description":"activity|price-low|price-high|offer-low|offer-high|minted-latest|minted-earliest|rarity-rare|rarity-common|volume-high|volume-low|recent-sale|recent-listed","schema":{"type":"string"}},{"name":"listed","in":"query","required":false,"description":"true|false|xrp|non-xrp","schema":{"type":"string"}},{"name":"traits","in":"query","required":false,"description":"type:value (comma-separated)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 50)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"owner","in":"query","required":false,"description":"r-address","schema":{"type":"string"}},{"name":"lightweight","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/traits":{"get":{"tags":["NFT"],"summary":"Collection trait breakdown","operationId":"get_nft_collections_slug_traits","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/traders":{"get":{"tags":["NFT"],"summary":"Top traders","operationId":"get_nft_collections_slug_traders","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"sort","in":"query","required":false,"description":"volume7d|all","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/orderbook":{"get":{"tags":["NFT"],"summary":"Collection orderbook","operationId":"get_nft_collections_slug_orderbook","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 50)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/metrics":{"get":{"tags":["NFT"],"summary":"Collection metrics snapshot (floor + deltas, volumes, sales, owners, listings)","operationId":"get_nft_collections_slug_metrics","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/history":{"get":{"tags":["NFT"],"summary":"Collection activity history","operationId":"get_nft_collections_slug_history","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"type","in":"query","required":false,"description":"SALE|MINT|BURN|TRANSFER|OFFER|LIST|DELIST|CANCEL","schema":{"type":"string"}},{"name":"account","in":"query","required":false,"description":"r-address — only events where this account is buyer or seller","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"since","in":"query","required":false,"description":"unix ms — only events at/after this time","schema":{"type":"integer"}},{"name":"sinceLedger","in":"query","required":false,"description":"ledger index — only events at/after this ledger (sorts by ledger desc)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/resolve":{"get":{"tags":["NFT"],"summary":"Resolve a collection from its XLS-20 on-chain identity (issuer account + taxon) to the full collection object incl. slug/cid. Every {slug} param on /nft/* endpoints ALSO accepts this identity directly as \"<issuer>:<taxon>\" (e.g. /nft/collections/rLyr...:1234/history)","operationId":"get_nft_collections_resolve","parameters":[{"name":"account","in":"query","required":true,"description":"issuer r-address (alias: issuer)","schema":{"type":"string"}},{"name":"taxon","in":"query","required":true,"description":"int (NFTokenTaxon)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/floor/history":{"get":{"tags":["NFT"],"summary":"Floor price history","operationId":"get_nft_collections_slug_floor_history","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"limit","in":"query","required":false,"description":"int (max 500, default 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/ohlc":{"get":{"tags":["NFT"],"summary":"Collection OHLC chart data","operationId":"get_nft_collections_slug_ohlc","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"limit","in":"query","required":false,"description":"int (max 1000, default 365; legacy daily mode)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"resolution","in":"query","required":false,"description":"5|15|30|60|240|D|W","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"1D|5D|1M|3M|1Y|ALL","schema":{"type":"string"}},{"name":"cb","in":"query","required":false,"description":"int candle count (max 2000)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/ohlc/{date}/sales":{"get":{"tags":["NFT"],"summary":"NFTs sold on specific date","operationId":"get_nft_collections_slug_ohlc_date_sales","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"date","in":"path","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD (also accepts unix timestamp with optional interval)"},{"name":"interval","in":"query","required":false,"description":"string (with unix timestamp date)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"sortBy","in":"query","required":false,"description":"costXRP|time","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/sparkline":{"get":{"tags":["NFT"],"summary":"Collection floor price sparkline","operationId":"get_nft_collections_slug_sparkline","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"period","in":"query","required":false,"description":"7d|30d|365d","schema":{"type":"string"}},{"name":"lightweight","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"maxPoints","in":"query","required":false,"description":"int (2-500, default 20)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/ownership":{"get":{"tags":["NFT"],"summary":"Ownership distribution","operationId":"get_nft_collections_slug_ownership","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 20)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/traders/{account}/volume":{"get":{"tags":["NFT"],"summary":"Trader volume stats","operationId":"get_nft_traders_account_volume","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/account/{account}/nfts":{"get":{"tags":["NFT"],"summary":"NFTs/collections owned with portfolio value","operationId":"get_nft_account_account_nfts","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"cid","in":"query","required":false,"description":"collection id","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100; max 50 in search mode)","schema":{"type":"integer"}},{"name":"skip","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"sortByValue","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"search","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/account/{account}/offers":{"get":{"tags":["NFT"],"summary":"NFT offers owned + incoming buy/sell offers (top 500 newest owned NFTs scanned; incomingOffersTruncated flag; fraud/fraudType detection)","operationId":"get_nft_account_account_offers","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"buy|sell","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 50)","schema":{"type":"integer"}},{"name":"skip","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/stats/global":{"get":{"tags":["NFT"],"summary":"Global NFT market stats (same source as /nft/global-metrics)","operationId":"get_nft_stats_global","responses":{"200":{"description":"Success"}},"parameters":[]}},"/nft/global-metrics":{"get":{"tags":["NFT"],"summary":"Global NFT metrics","operationId":"get_nft_global_metrics","responses":{"200":{"description":"Success"}},"parameters":[]}},"/nft/analytics/market":{"get":{"tags":["NFT"],"summary":"NFT market analytics","operationId":"get_nft_analytics_market","parameters":[{"name":"startDate","in":"query","required":false,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d|30d|all","schema":{"type":"string"}},{"name":"includeDailyHistory","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/nft/holders/{slug}":{"get":{"tags":["NFT"],"summary":"Collection holder list","operationId":"get_nft_holders_slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/holders/address/{account}":{"get":{"tags":["NFT"],"summary":"Collections/NFTs held by wallet","operationId":"get_nft_holders_address_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/holders/{slug}/distribution":{"get":{"tags":["NFT"],"summary":"Holder distribution by tier (whales/orcas/dolphins/fish/shrimp)","operationId":"get_nft_holders_slug_distribution","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"}],"responses":{"200":{"description":"Success"}}}},"/nft/floor/history/{cid}":{"get":{"tags":["NFT"],"summary":"Floor history by collection ID","operationId":"get_nft_floor_history_cid","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 500, default 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/brokers/stats":{"get":{"tags":["NFT"],"summary":"Broker fee statistics","operationId":"get_nft_brokers_stats","responses":{"200":{"description":"Success"}},"parameters":[]}},"/nft/analytics/traders":{"get":{"tags":["NFT"],"summary":"NFT trader leaderboard","operationId":"get_nft_analytics_traders","parameters":[{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 50)","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"volume|profit|trades|roi|winRate|combinedProfit|lastTrade|xrpBalance","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"24h|7d|30d|all","schema":{"type":"string"}},{"name":"minVolume","in":"query","required":false,"description":"number","schema":{"type":"number"}},{"name":"minTrades","in":"query","required":false,"description":"number","schema":{"type":"number"}},{"name":"minProfit","in":"query","required":false,"description":"number","schema":{"type":"number"}},{"name":"minROI","in":"query","required":false,"description":"number","schema":{"type":"number"}},{"name":"address","in":"query","required":false,"description":"substring","schema":{"type":"string"}},{"name":"marketplace","in":"query","required":false,"description":"string (see /nft/analytics/marketplaces)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/trader/{account}":{"get":{"tags":["NFT"],"summary":"Single NFT trader profile","operationId":"get_nft_analytics_trader_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/trader/{account}/history":{"get":{"tags":["NFT"],"summary":"Trader daily history","operationId":"get_nft_analytics_trader_account_history","description":"total = pre-slice count","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"startDate","in":"query","required":false,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (default 365; returns last N days)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/trader/{account}/collections":{"get":{"tags":["NFT"],"summary":"Trader per-collection breakdown","operationId":"get_nft_analytics_trader_account_collections","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"volume|profit|roi","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/trader/{account}/trades":{"get":{"tags":["NFT"],"summary":"Trader trade history","operationId":"get_nft_analytics_trader_account_trades","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 50)","schema":{"type":"integer"}},{"name":"type","in":"query","required":false,"description":"SALE|MINT|BURN|TRANSFER|OFFER","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/collection/{slug}/traders":{"get":{"tags":["NFT"],"summary":"Top traders for collection","operationId":"get_nft_analytics_collection_slug_traders","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 50)","schema":{"type":"integer"}},{"name":"page","in":"query","description":"int (1-based, default 1)","schema":{"type":"integer","minimum":1,"default":1}},{"name":"sort","in":"query","required":false,"description":"volume|sales|profit|roi|globalVolume|globalProfit|combinedProfit|holdingsCount","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"24h|7d|30d|all","schema":{"type":"string"}},{"name":"address","in":"query","required":false,"description":"substring filter","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/rotations":{"get":{"tags":["NFT"],"summary":"NFT collection rotation analytics","operationId":"get_nft_analytics_rotations","parameters":[{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default 7d)","schema":{"type":"string"}},{"name":"minXrp","in":"query","required":false,"description":"number (default 1)","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 50)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/rotations/{cid}":{"get":{"tags":["NFT"],"summary":"NFT collection rotations by collection id","operationId":"get_nft_analytics_rotations_cid","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default 24h)","schema":{"type":"string"}},{"name":"minXrp","in":"query","required":false,"description":"number (default 1)","schema":{"type":"number"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/trader/{account}/rotations":{"get":{"tags":["NFT"],"summary":"NFT trader rotations history","operationId":"get_nft_analytics_trader_account_rotations","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default 24h)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/pin/status/{hash}":{"get":{"tags":["NFT"],"summary":"IPFS pin status by hash","operationId":"get_nft_pin_status_hash","description":"hash must be an IPFS CID (Qm… or bafy…)","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/scam":{"get":{"tags":["NFT"],"summary":"NFT-scam insights snapshot — totals (XRP/token drained, NFTs flagged, scam wallets), monthly timeline, top scammers/victims, tokens drained with XRP values, recent drain feed, and scamIssuersList (flat array of every flagged-issuer address for client-side filtering). For per-NFT checks, use GET /nft/:nftId — it already returns scam + scamType.","operationId":"get_nft_scam","responses":{"200":{"description":"Success"}},"parameters":[]}},"/nft/collections/{slug}/listings/distribution":{"get":{"tags":["NFT"],"summary":"Listed-price distribution vs floor (buckets at 1x/1.25x/1.5x/2x/3x/5x/10x floor), floor/median/avg/max","operationId":"get_nft_collections_slug_listings_distribution","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/listings/history":{"get":{"tags":["NFT"],"summary":"Daily listed-count history merged with floor/volume/sales","operationId":"get_nft_collections_slug_listings_history","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"from","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/holders/history":{"get":{"tags":["NFT"],"summary":"Daily holder-count history","operationId":"get_nft_collections_slug_holders_history","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"from","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/{slug}/mints":{"get":{"tags":["NFT"],"summary":"Mint counts over time with cumulative total","operationId":"get_nft_collections_slug_mints","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"},{"name":"interval","in":"query","required":false,"description":"day|hour","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"unix ms","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/nft/collections/sparkline/batch":{"get":{"tags":["NFT"],"summary":"Batch floor sparklines for multiple collections","operationId":"get_nft_collections_sparkline_batch","parameters":[{"name":"slugs","in":"query","required":false,"description":"comma-separated (max 100)","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"7d|30d|365d","schema":{"type":"string"}},{"name":"maxPoints","in":"query","required":false,"description":"int (2-500)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/nft/analytics/marketplaces":{"get":{"tags":["NFT"],"summary":"Distinct NFT marketplaces with trader counts","operationId":"get_nft_analytics_marketplaces","responses":{"200":{"description":"Success"}},"parameters":[]}},"/nft/pin":{"post":{"tags":["NFT"],"summary":"Pin NFT media to platform IPFS node (resolves hash from NFT URI if only NFTokenID given)","operationId":"post_nft_pin","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ NFTokenID? (64-hex), ipfsHash? (CID) }"}}}},"parameters":[]}},"/nft/collections/{slug}/metadata":{"post":{"tags":["NFT"],"summary":"Edit collection metadata","operationId":"post_nft_collections_slug_metadata","description":"Auth: wallet signature (collection account/issuer or admin)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ description?, twitter?, website? }"}}}},"security":[{"WalletSignature":[]}]}},"/tx-explain/{hash}":{"get":{"tags":["Tx Explain"],"summary":"Human-readable transaction explanation (20 credits)","operationId":"get_tx_explain_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ hash, extracted, summary: { summary, keyPoints[] }, timestamp }"}}}}}}},"/account-tx-explain/{account}":{"get":{"tags":["Account Tx Explain"],"summary":"Wallet activity analysis and profiling (20 credits)","operationId":"get_account_tx_explain_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (200-400, default 200)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ account, accountInfo, period, txCount, stats, analysis: { profile, headline, keyFindings[], riskLevel }, topAddresses[], model, disclaimer, timestamp }"}}}}}}},"/token/review/{id}":{"get":{"tags":["Token Review"],"summary":"Token risk assessment (score 1-10, lower = safer)","operationId":"get_token_review_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ md5, token, score, riskLevel, riskCount, positiveCount, supplyControl, creatorTokens[], timestamp }"}}}}}}},"/traders/{account}":{"get":{"tags":["Traders"],"summary":"Full trader profile","operationId":"get_traders_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 50)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"sortTokensBy","in":"query","required":false,"description":"volume|profit|trades|roi|lastTradeDate","schema":{"type":"string"}},{"name":"tokenIds","in":"query","required":false,"description":"comma-separated token md5s (filter, skips pagination)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, address, rank, totalTokensTraded, holdingValue, tokenPerformance[], recentTokens[], pagination: { totalTokens (servable, capped 500), lifetimeTokens, truncated, limit, offset, hasMore } }"}}}}}}},"/traders/token-traders/{id}":{"get":{"tags":["Traders"],"summary":"Top traders for a token","operationId":"get_traders_token_traders_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"24h|7d|30d|all","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"volume|pnl|trades|bought|sold|roi|wash|lastActive|unrealized|balance","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 500, default 50)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"minVolume","in":"query","required":false,"description":"float (filters all-time buyVolume)","schema":{"type":"number"}},{"name":"search","in":"query","required":false,"description":"address prefix","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/traders/rotations":{"get":{"tags":["Traders"],"summary":"Cross-token trader rotation analytics","operationId":"get_traders_rotations","parameters":[{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default 24h)","schema":{"type":"string"}},{"name":"minXrp","in":"query","required":false,"description":"float (default 1)","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 50)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/traders/rotations/{tokenId}":{"get":{"tags":["Traders"],"summary":"Trader rotations for a specific token","operationId":"get_traders_rotations_tokenId","description":"tokenId must be a raw md5 (no slug resolution)","parameters":[{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default 24h)","schema":{"type":"string"}},{"name":"minXrp","in":"query","required":false,"description":"float (default 1)","schema":{"type":"number"}}],"responses":{"200":{"description":"Success"}}}},"/traders/{account}/rotations":{"get":{"tags":["Traders"],"summary":"Per-account token rotation flow (XRP bought/sold per token in window)","operationId":"get_traders_account_rotations","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default 24h)","schema":{"type":"string"}},{"name":"minXrp","in":"query","required":false,"description":"float (default 0.01)","schema":{"type":"number"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, period, account, totalTrades, tokensTraded, rotationCount, tokens[] }"}}}}}}},"/token/analytics/token/{id}":{"get":{"tags":["Analytics"],"summary":"Token analytics","operationId":"get_token_analytics_token_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/token/{id}/traders":{"get":{"tags":["Analytics"],"summary":"Top traders for token","operationId":"get_token_analytics_token_id_traders","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 50)","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"volume24h|volume7d|volume30d|volumeTotal|trades24h|tradesTotal|realizedPnl|unrealizedPnl|totalPnl|holding|lastTradeAt|firstTradeAt","schema":{"type":"string"}},{"name":"address","in":"query","required":false,"description":"filter","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/trader/{address}":{"get":{"tags":["Analytics"],"summary":"Trader cumulative stats","operationId":"get_token_analytics_trader_address","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/trader/{address}/tokens":{"get":{"tags":["Analytics"],"summary":"Trader token-specific metrics","operationId":"get_token_analytics_trader_address_tokens","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":false,"description":"token id","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/traders":{"get":{"tags":["Analytics"],"summary":"All traders with cumulative stats","operationId":"get_token_analytics_traders","parameters":[{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 500, default 50)","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"volume24h|volume7d|totalVolume|totalProfit|totalTrades|avgROI|winRate|lastTradeDate|washTradingScore|activityScore (unknown values fall back to volume24h)","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc|desc","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"24h|7d|30d|all","schema":{"type":"string"}},{"name":"startDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}},{"name":"minVolume","in":"query","required":false,"description":"float (filters volume24h)","schema":{"type":"number"}},{"name":"minTrades","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"minProfit","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minROI","in":"query","required":false,"description":"float","schema":{"type":"number"}},{"name":"minTokens","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"address","in":"query","required":false,"description":"partial match","schema":{"type":"string"}},{"name":"includeAMM","in":"query","required":false,"description":"bool (default true)","schema":{"type":"boolean"}},{"name":"sourceTag","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"compact","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/market":{"get":{"tags":["Analytics"],"summary":"Daily market metrics","operationId":"get_token_analytics_market","parameters":[{"name":"startDate","in":"query","required":false,"description":"ISO (required)","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/trader/{address}/history":{"get":{"tags":["Analytics"],"summary":"Trader volume history","operationId":"get_token_analytics_trader_address_history","description":"Returns a bare JSON array","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"startDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"int (1-based, default 1; page 1 = most recent window)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 500, default 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/trader/{address}/trades":{"get":{"tags":["Analytics"],"summary":"Trader trade history","operationId":"get_token_analytics_trader_address_trades","description":"Returns a bare JSON array","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"startDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"description":"ISO","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"int (1-based, default 1; page 1 = most recent window)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (max 500, default 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/token/analytics/traders/summary":{"get":{"tags":["Analytics"],"summary":"Trader balance snapshots summary","operationId":"get_token_analytics_traders_summary","responses":{"200":{"description":"Success"}},"parameters":[]}},"/token/analytics/sources":{"get":{"tags":["Analytics"],"summary":"Distinct trade sourceTags with trader counts and volume totals","operationId":"get_token_analytics_sources","responses":{"200":{"description":"Success"}},"parameters":[]}},"/token/flow/{id}":{"get":{"tags":["Token Flow"],"summary":"Creator allocation and distribution analysis (precomputed)","operationId":"get_token_flow_id","description":"{id} must be a raw md5 (no slug resolution); serves a precomputed document, no query params. summary.creatorAllocated/Delivered/Locked* describe the creator's own cut (escrow / check / issuer payment) and where it went; their percentages are measured against circulating supply PLUS anything still locked in escrow, since escrowed tokens sit outside every trustline. summary.placed* account for everything the creator passed on and sum to totalTransferred exactly: Held, Sold, Pooled, Burned, ToExchange, Returned (back to the creator), plus two residuals that are never merged into the others - Untraced (a hop we do not follow) and Unscanned (a wallet whose history exceeded the page budget).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, token, summary, linkedAddresses[], exchangeBreakdown[], graph: { nodes[], edges[] }, processedAt, lastLedger } or { success, pending: true }"}}}}}}},"/news":{"get":{"tags":["News"],"summary":"Latest XRP news with sentiment","operationId":"get_news","description":"Auth: Developer tier+ API key","parameters":[{"name":"offset","in":"query","required":false,"description":"int (clamped >= 0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (1-100, default 20)","schema":{"type":"integer"}},{"name":"source","in":"query","required":false,"description":"filter (approved sources only)","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD (single-day filter)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ sentiment: { 24h, 7d, 30d, all }, sources[], data[], pagination: { offset, limit, total, totalPages } }"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/news/search":{"get":{"tags":["News"],"summary":"Search news articles","operationId":"get_news_search","description":"Auth: Developer tier+ API key","parameters":[{"name":"q","in":"query","required":false,"description":"string (required)","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int (clamped >= 0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (1-100, default 20)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ query, sentiment, data[], pagination }"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/news/unapproved-sources":{"get":{"tags":["News"],"summary":"News sources pending approval","operationId":"get_news_unapproved_sources","description":"Auth: Developer tier+ API key","parameters":[{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (1-100, default 20)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}]}},"/news/sentiment-chart":{"get":{"tags":["News"],"summary":"Historical sentiment analysis chart","operationId":"get_news_sentiment_chart","description":"Auth: Developer tier+ API key","parameters":[{"name":"days","in":"query","required":false,"description":"int (1-365, default 30)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ labels[], bullish[], bearish[], neutral[], updated }"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mentions/search":{"get":{"tags":["Mentions"],"summary":"Agent-friendly search across X/Twitter mentions with full-text + filters. Returns enriched tweets with token name, spam/impostor flags.","operationId":"get_mentions_search","description":"Auth: Developer tier+ API key","parameters":[{"name":"q","in":"query","required":false,"description":"string (full-text search on tweet content, max 200 chars)","schema":{"type":"string"}},{"name":"author","in":"query","required":false,"description":"string (username prefix match, case-insensitive)","schema":{"type":"string"}},{"name":"token","in":"query","required":false,"description":"string (token name, ticker, or md5)","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"ISO date or unix ms (lower bound on tweetCreatedAt)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"ISO date or unix ms (upper bound)","schema":{"type":"string"}},{"name":"minLikes","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"minViews","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"excludeSpam","in":"query","required":false,"description":"bool (default true; pass false to include spam-flagged tweets)","schema":{"type":"boolean"}},{"name":"excludeImpostors","in":"query","required":false,"description":"bool (filter out impostor accounts)","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"recent|engagement|views|relevance (relevance requires q)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}]}},"/mentions/feed":{"get":{"tags":["Mentions"],"summary":"Global social feed with trending tokens, top authors, activity chart, and impostor list","operationId":"get_mentions_feed","description":"Auth: Developer tier+ API key","parameters":[{"name":"limit","in":"query","required":false,"description":"int (max 100, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (clamped >= 0)","schema":{"type":"integer"}},{"name":"period","in":"query","required":false,"description":"1d|7d|30d|90d|all","schema":{"type":"string"}},{"name":"author","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"string (full-text)","schema":{"type":"string"}},{"name":"excludeSpam","in":"query","required":false,"description":"bool (default true — spam rows removed in-query; pagination and count share the filtered row space; pass false to include)","schema":{"type":"boolean"}},{"name":"excludeImpostors","in":"query","required":false,"description":"bool (impostor rows removed in-query; also filters topAuthors)","schema":{"type":"boolean"}},{"name":"minViews","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"minLikes","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"recent|engagement|views|likes (default recent)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}]}},"/mentions/{md5}":{"get":{"tags":["Mentions"],"summary":"Per-token mention feed with stats, top mentioners, and activity chart","operationId":"get_mentions_md5","description":"Auth: Developer tier+ API key","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"1d|7d|30d|90d|all","schema":{"type":"string"}},{"name":"author","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (clamped >= 0)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}]}},"/mentions/spaces":{"get":{"tags":["Mentions"],"summary":"X Space hosts with full history and inferred schedule (days/hour UTC). Returns all known space hosts sorted by most recent activity.","operationId":"get_mentions_spaces","description":"Auth: Developer tier+ API key","parameters":[{"name":"limit","in":"query","required":false,"description":"int (hosts, max 500, default 200)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"spacesLimit","in":"query","required":false,"description":"int (spaces per host, max 100, default 10)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}]}},"/mentions/openapi.json":{"get":{"tags":["Mentions"],"summary":"OpenAPI 3.0 spec for the mentions endpoints (agent/MCP discoverable)","operationId":"get_mentions_openapi_json","description":"Auth: Developer tier+ API key","responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}],"parameters":[]}},"/mentions/timeline":{"get":{"tags":["Mentions"],"summary":"Full timeline of tracked influencer tweets (not just token matches)","operationId":"get_mentions_timeline","parameters":[{"name":"limit","in":"query","required":false,"description":"int (max 100, default 50)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"period","in":"query","required":false,"description":"1d|7d|30d|90d|all (default 30d)","schema":{"type":"string"}},{"name":"author","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"recent|engagement|views|likes","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ mentions[], count, period }"}}}}}}},"/mentions/x-search":{"get":{"tags":["Mentions"],"summary":"Live X/Twitter search via scraper (503 if scraper unavailable)","operationId":"get_mentions_x_search","parameters":[{"name":"q","in":"query","required":false,"description":"string (required, min 3 chars)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 20, default 10)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ query, count, tweets[] }"}}}}}}},"/mentions/grok-pulse":{"get":{"tags":["Mentions"],"summary":"Grok-generated XRPL insight topics with sentiment","operationId":"get_mentions_grok_pulse","parameters":[{"name":"topic","in":"query","required":false,"description":"string (optional)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/mentions/profile/{username}":{"get":{"tags":["Mentions"],"summary":"Latest X profile snapshot + change history for a handle","operationId":"get_mentions_profile_username","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ username, latest, updates, followersDelta, samples }"}}}}}}},"/launch-token":{"post":{"tags":["Launch"],"summary":"Create new token with AMM","operationId":"post_launch_token","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ currencyCode, tokenSupply, ammXrpAmount, name, origin, user, antiSnipe?, imageData?, domain?, description?, telegram?, twitter?, userCheckAmount?, platformRetentionPercent?, ammTradingFee?, bundleRecipients?[] }"}}}},"parameters":[]}},"/launch-token/status/{sessionId}":{"get":{"tags":["Launch"],"summary":"Launch session status","operationId":"get_launch_token_status_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/launch-token/queue-status/{sessionId}":{"get":{"tags":["Launch"],"summary":"Queue position status","operationId":"get_launch_token_queue_status_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/launch-token/authorize":{"post":{"tags":["Launch"],"summary":"Authorize trustline (anti-snipe)","operationId":"post_launch_token_authorize","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ sessionId, userAddress }"}}}},"parameters":[]}},"/launch-token/auth-info/{issuer}/{currency}":{"get":{"tags":["Launch"],"summary":"Token authorization info","operationId":"get_launch_token_auth_info_issuer_currency","parameters":[{"name":"issuer","in":"path","required":true,"schema":{"type":"string"}},{"name":"currency","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/launch-token/check-auth/{issuer}/{currency}/{address}":{"get":{"tags":["Launch"],"summary":"Check if address is authorized","operationId":"get_launch_token_check_auth_issuer_currency_address","parameters":[{"name":"issuer","in":"path","required":true,"schema":{"type":"string"}},{"name":"currency","in":"path","required":true,"schema":{"type":"string"}},{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/launch-token/calculate-funding":{"get":{"tags":["Launch"],"summary":"Calculate required XRP funding (400 on invalid params)","operationId":"get_launch_token_calculate_funding","parameters":[{"name":"amm_xrp_amount","in":"query","required":false,"description":"float (1-100000000000)","schema":{"type":"number"}},{"name":"anti_snipe","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"token_supply","in":"query","required":false,"description":"float (positive)","schema":{"type":"number"}},{"name":"user_check_amount","in":"query","required":false,"description":"float (>=0)","schema":{"type":"number"}},{"name":"bundle_count","in":"query","required":false,"description":"int (max 10)","schema":{"type":"integer"}},{"name":"bundle_percent","in":"query","required":false,"description":"float (max 50 per recipient)","schema":{"type":"number"}},{"name":"vesting_tranches","in":"query","required":false,"description":"int (0-12)","schema":{"type":"integer"}},{"name":"platform_retention_percent","in":"query","required":false,"description":"float (0-10)","schema":{"type":"number"}}],"responses":{"200":{"description":"Success"}}}},"/launch-token/my-launches":{"get":{"tags":["Launch"],"summary":"Launches created with your API key, with total count (a wallet lists its own with /launch-token/my-launches-wallet)","operationId":"get_launch_token_my_launches","parameters":[{"name":"sessionId","in":"query","required":false,"description":"string (optional)","schema":{"type":"string"}},{"name":"start","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default 50, max 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/launch-token/{sessionId}/image":{"post":{"tags":["Launch"],"summary":"Upload token image (base64, max 500KB)","operationId":"post_launch_token_sessionId_image","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ imageData }"}}}}}},"/launch-token/my-launches-wallet":{"get":{"tags":["Launch"],"summary":"Token launches by wallet with total count","operationId":"get_launch_token_my_launches_wallet","description":"Auth: wallet signature","parameters":[{"name":"start","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default 20, max 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/launch-token/vesting-by-token/{issuer}/{currency}":{"get":{"tags":["Launch"],"summary":"Vesting schedule for a launched token (response includes truncated flag when escrow list is incomplete)","operationId":"get_launch_token_vesting_by_token_issuer_currency","parameters":[{"name":"issuer","in":"path","required":true,"schema":{"type":"string"}},{"name":"currency","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/referral/{address}":{"get":{"tags":["Referral"],"summary":"Get soldier profile","operationId":"get_referral_address","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/referral/{address}/stats":{"get":{"tags":["Referral"],"summary":"Badge progress and tier stats","operationId":"get_referral_address_stats","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/referral/leaderboard/{type}":{"get":{"tags":["Referral"],"summary":"Leaderboard","operationId":"get_referral_leaderboard_type","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string"},"description":"recruits|streak|season|whales"},{"name":"limit","in":"query","required":false,"description":"int (default 100, max 500)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/referral/meta/tiers":{"get":{"tags":["Referral"],"summary":"Tier definitions","operationId":"get_referral_meta_tiers","responses":{"200":{"description":"Success"}},"parameters":[]}},"/referral/meta/badges":{"get":{"tags":["Referral"],"summary":"Badge definitions","operationId":"get_referral_meta_badges","responses":{"200":{"description":"Success"}},"parameters":[]}},"/referral/meta/missions":{"get":{"tags":["Referral"],"summary":"Mission quest chains","operationId":"get_referral_meta_missions","responses":{"200":{"description":"Success"}},"parameters":[]}},"/referral/meta/season":{"get":{"tags":["Referral"],"summary":"Seasonal leaderboard rewards","operationId":"get_referral_meta_season","responses":{"200":{"description":"Success"}},"parameters":[]}},"/referral/{address}/earnings":{"get":{"tags":["Referral"],"summary":"Referral earnings breakdown for an address","operationId":"get_referral_address_earnings","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/referral/{address}/fees":{"get":{"tags":["Referral"],"summary":"Referral fee history; response includes asReferrerTotal/asRecruitTotal for paging","operationId":"get_referral_address_fees","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (default 50, max 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/referral/resolve/{code}":{"get":{"tags":["Referral"],"summary":"Resolve a referral code to validity/owner","operationId":"get_referral_resolve_code","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/promotion/pool/{md5}":{"get":{"tags":["Promotion"],"summary":"Get promotion pool info (status, amounts, expiry)","operationId":"get_promotion_pool_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/promotion/reward/{md5}/{account}":{"get":{"tags":["Promotion"],"summary":"Get reward status for a token","operationId":"get_promotion_reward_md5_account","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/promotion/leaderboard/{md5}":{"get":{"tags":["Promotion"],"summary":"Per-token promoter leaderboard","operationId":"get_promotion_leaderboard_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default 20, max 1000)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/promotion/profile/{account}":{"get":{"tags":["Promotion"],"summary":"Global promotion stats","operationId":"get_promotion_profile_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/promotion/tiers":{"get":{"tags":["Promotion"],"summary":"Promoter tier metadata","operationId":"get_promotion_tiers","responses":{"200":{"description":"Success"}},"parameters":[]}},"/promotion/claim":{"post":{"tags":["Promotion"],"summary":"Claim earned promotion rewards (paid in XRP)","operationId":"post_promotion_claim","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ md5, account }"}}}},"parameters":[]}},"/bridge/currencies":{"get":{"tags":["Bridge"],"summary":"List available exchange currencies","operationId":"get_bridge_currencies","responses":{"200":{"description":"Success"}},"parameters":[]}},"/bridge/estimate":{"get":{"tags":["Bridge"],"summary":"Get exchange rate estimate","operationId":"get_bridge_estimate","parameters":[{"name":"fromCurrency","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"toCurrency","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"fromAmount","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"fromNetwork","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"toNetwork","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/bridge/min-amount":{"get":{"tags":["Bridge"],"summary":"Get minimum exchange amount","operationId":"get_bridge_min_amount","parameters":[{"name":"fromCurrency","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"toCurrency","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/bridge/create":{"post":{"tags":["Bridge"],"summary":"Create exchange","operationId":"post_bridge_create","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ fromCurrency, toCurrency, fromAmount, address, refundAddress? }"}}}},"parameters":[]}},"/bridge/status":{"get":{"tags":["Bridge"],"summary":"Get exchange status","operationId":"get_bridge_status","parameters":[{"name":"id","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/bridge/validate-address":{"get":{"tags":["Bridge"],"summary":"Validate destination address","operationId":"get_bridge_validate_address","parameters":[{"name":"currency","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"address","in":"query","required":false,"description":"string","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/verify/pricing":{"get":{"tags":["Verify"],"summary":"Verification tier pricing","operationId":"get_verify_pricing","responses":{"200":{"description":"Success"}},"parameters":[]}},"/verify/stripe/status/{sessionId}":{"get":{"tags":["Verify"],"summary":"Check Stripe verification payment status; fulfills if webhook was missed","operationId":"get_verify_stripe_status_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"query","required":false,"description":"string (required — token md5 or collection id)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/verify/request":{"post":{"tags":["Verify"],"summary":"Create XRP invoice for token/collection verification","operationId":"post_verify_request","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ type, id, tier, account }"}}}},"parameters":[]}},"/verify/confirm":{"post":{"tags":["Verify"],"summary":"Confirm verification payment","operationId":"post_verify_confirm","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ invoiceId | txHash }"}}}},"parameters":[]}},"/verify/stripe/checkout":{"post":{"tags":["Verify"],"summary":"Stripe checkout for verification","operationId":"post_verify_stripe_checkout","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ type, id, tier, account }"}}}},"parameters":[]}},"/tweet/token/{md5}":{"get":{"tags":["Tweet Verify"],"summary":"Tweet verifications for a token (md5) or NFT collection (slug)","operationId":"get_tweet_token_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 1000, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (clamped >= 0)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/tweet/account/{account}":{"get":{"tags":["Tweet Verify"],"summary":"Tweet verifications by account","operationId":"get_tweet_account_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 1000, default 20)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int (clamped >= 0)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/tweet/verify":{"post":{"tags":["Tweet Verify"],"summary":"Verify a promotional tweet and credit the wallet. One verification per wallet every 2 hours, up to 6 tokens per X account per UTC day, and a tweet earns from one pool.","operationId":"post_tweet_verify","description":"Auth: wallet signature","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ md5 (token md5 or NFT slug), tweetUrl, account, type?: token|nft }"}}}},"security":[{"WalletSignature":[]}],"parameters":[]}},"/boost/quote/{md5}":{"get":{"tags":["Boost"],"summary":"Get quote for boosting a token","operationId":"get_boost_quote_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"rank","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/boost/purchase":{"post":{"tags":["Boost"],"summary":"Create boost payment request","operationId":"post_boost_purchase","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ md5, boostAmount, payerAddress }"}}}},"parameters":[]}},"/boost/verify/{invoiceId}":{"get":{"tags":["Boost"],"summary":"Verify payment and apply boost","operationId":"get_boost_verify_invoiceId","parameters":[{"name":"invoiceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/boost/stripe":{"post":{"tags":["Boost"],"summary":"Create Stripe checkout for boost","operationId":"post_boost_stripe","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ md5, packId, payerAddress }"}}}},"parameters":[]}},"/boost/stripe/{sessionId}":{"get":{"tags":["Boost"],"summary":"Check Stripe boost payment status","operationId":"get_boost_stripe_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet","in":"query","required":false,"description":"r-address (required, must match invoice payer)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/boost/active":{"get":{"tags":["Boost"],"summary":"Currently active token boosts (admin only)","operationId":"get_boost_active","description":"Auth: X-Admin-Key","responses":{"200":{"description":"Success"}},"security":[{"AdminKey":[]}],"parameters":[]}},"/boost/nft/quote/{slug}":{"get":{"tags":["Boost"],"summary":"Quote price for boosting an NFT collection (slug also accepts \"<issuer>:<taxon>\")","operationId":"get_boost_nft_quote_slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"collection slug, or XLS-20 identity \"<issuer>:<taxon>\" (e.g. rLyr...:1234)"}],"responses":{"200":{"description":"Success"}}}},"/boost/nft/purchase":{"post":{"tags":["Boost"],"summary":"Initiate XRP-paid NFT collection boost","operationId":"post_boost_nft_purchase","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ slug, boostAmount, ... }"}}}},"parameters":[]}},"/boost/nft/verify/{invoiceId}":{"get":{"tags":["Boost"],"summary":"Verify NFT boost payment","operationId":"get_boost_nft_verify_invoiceId","parameters":[{"name":"invoiceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/boost/nft/stripe":{"post":{"tags":["Boost"],"summary":"Initiate Stripe-paid NFT collection boost","operationId":"post_boost_nft_stripe","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ slug, boostAmount }"}}}},"parameters":[]}},"/boost/nft/stripe/{sessionId}":{"get":{"tags":["Boost"],"summary":"Check Stripe checkout status for NFT boost","operationId":"get_boost_nft_stripe_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet","in":"query","required":false,"description":"r-address (required, must match invoice payer)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/scams":{"get":{"tags":["Scams"],"summary":"Full scam report with abuse statistics","operationId":"get_scams","responses":{"200":{"description":"Success"}},"parameters":[]}},"/scams/tokens":{"get":{"tags":["Scams"],"summary":"Tokens issued by one named issuer. issuer is required — this endpoint lists an issuer's tokens, it does not classify them. For a scam verdict use /scams/addresses or /scams/check/{account}.","operationId":"get_scams_tokens","parameters":[{"name":"issuer","in":"query","required":true,"description":"address (REQUIRED)","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"int (default 1)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default 50, max 100)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"400":{"description":"issuer missing or not a valid XRPL address"}},"description":"Lists the tokens issued by the named issuer. `issuer` is REQUIRED and this endpoint makes no scam determination: it does not classify or flag the tokens it returns. For a scam verdict use /scams/addresses (the canonical blocklist) or /scams/check/{account}. The former optional no-issuer listing was removed in 1.15 - it returned every token of any issuer holding 5+ tokens, which is a property of bridges and gateways, not of scams."}},"/scams/domains":{"get":{"tags":["Scams"],"summary":"Known scam domains with registrar info","operationId":"get_scams_domains","responses":{"200":{"description":"Success"}},"parameters":[]}},"/scams/nft":{"get":{"tags":["Scams"],"summary":"NFT scam accounts and recent sales","operationId":"get_scams_nft","responses":{"200":{"description":"Success"}},"parameters":[]}},"/scams/check/{account}":{"get":{"tags":["Scams"],"summary":"Check if account is a known scam. is_scam is true ONLY for accounts on the verified blocklist or confirmed scam NFT issuers — never inferred from an account's token names or token count. Also returns first_seen/age_seconds/new_account (advisory counterparty freshness, independent of is_scam)","description":"Pre-signature safety check, never cached. is_scam is true ONLY when the account is on the verified blocklist (ledger_v1.scam_accounts) or is a confirmed scam NFT issuer - it is NEVER inferred from the account's token names or token count. (Through 1.14 it was: an issuer with 10+ tokens, or 2+ token names matching a brand keyword, was reported as a scam, which flagged bridges and gateways such as Axelar. Removed in 1.15.) Also returns counterparty freshness: first_seen, age_seconds and new_account (true when the account is under 24h old and not vouched). Freshness is ADVISORY and independent of is_scam - surface it as 'this address is new', never as 'scam', since ordinary first-time wallets are new too. An admin-verified account or a named exchange/service wallet is never reported as new. Unknown activation time returns null/false.","operationId":"get_scams_check_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"account":{"type":"string"},"is_scam":{"type":"boolean"},"risk_level":{"type":"string"},"first_seen":{"type":"string","nullable":true,"description":"ISO 8601 activation time, null when unknown"},"age_seconds":{"type":"integer","nullable":true,"description":"Seconds since activation, null when unknown"},"new_account":{"type":"boolean","description":"Under 24h old and not vouched. Advisory only, never a verdict."}}}}}}}}},"/scams/report-scam":{"get":{"tags":["Scams"],"summary":"List community scam reports","operationId":"get_scams_report_scam","parameters":[{"name":"page","in":"query","required":false,"description":"int (default 1)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default 50, max 100)","schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"description":"pending|reviewed|confirmed|dismissed","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/scams/report/{domain}":{"get":{"tags":["Scams"],"summary":"Confirmations for a reported domain","operationId":"get_scams_report_domain","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/scams/report":{"post":{"tags":["Scams"],"summary":"Report a scam domain","operationId":"post_scams_report","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ domain, ... }"}}}},"parameters":[]}},"/creator-activity/{id}":{"get":{"tags":["Creator Activity"],"summary":"Token creator trading activity","operationId":"get_creator_activity_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"md5 or creator r-address"},{"name":"since","in":"query","required":false,"description":"unix ms — return events strictly newer (exclusive)","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"unix ms — return events strictly older (exclusive cursor)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200)","schema":{"type":"integer"}},{"name":"side","in":"query","required":false,"description":"buy|sell","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"event type","schema":{"type":"string"}},{"name":"stream","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success"}}}},"/creator-activity/{id}/receiver/{address}":{"get":{"tags":["Creator Activity"],"summary":"Creator activity filtered by recipient address","operationId":"get_creator_activity_id_receiver_address","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/whale-activity/feed":{"get":{"tags":["Creator Activity"],"summary":"Global whale tape — the newest notable trades across ALL tokens. `tokens` maps each event md5 to its display identity (name, user, slug, verified)","operationId":"get_whale_activity_feed","parameters":[{"name":"limit","in":"query","required":false,"description":"int (default 30, max 100)","schema":{"type":"integer"}},{"name":"since","in":"query","required":false,"description":"unix ms — return events strictly newer (exclusive)","schema":{"type":"string"}},{"name":"minXrp","in":"query","required":false,"description":"float — minimum XRP size","schema":{"type":"number"}},{"name":"side","in":"query","required":false,"description":"buy|sell","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/whale-activity/{id}":{"get":{"tags":["Creator Activity"],"summary":"Whale social-proof trade events — top holders of major tokens, smart money, named accounts, whale-sized and fresh-wallet trades on this token","operationId":"get_whale_activity_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"md5 or trader r-address"},{"name":"since","in":"query","required":false,"description":"unix ms — return events strictly newer (exclusive)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/platform-stats":{"get":{"tags":["Platform Stats"],"summary":"Aggregated trading stats grouped by platform key (numeric SourceTag, or canonical name for memo-identified platforms like SPYDEX)","operationId":"get_platform_stats","parameters":[{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default: 24h)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, period, totals, platforms[]: { sourceTag, name, slug, txCount, uaw, uniqueTraders, volume, buyVolumeXrp, sellVolumeXrp, pctVolume, pctUAW, pctTx, ... } }"}}}}}}},"/platform-stats/detail/{sourceTag}":{"get":{"tags":["Platform Stats"],"summary":"Top tokens traded via a single platform; summary covers ALL tokens for the platform/period, not just returned rows","operationId":"get_platform_stats_detail_sourceTag","parameters":[{"name":"sourceTag","in":"path","required":true,"schema":{"type":"string"},"description":"numeric tag or platform slug"},{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default: 7d)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (default 50, clamped 1-200)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"}}}},"/platform-stats/hourly/{sourceTag}":{"get":{"tags":["Platform Stats"],"summary":"Hourly breakdown for a single platform","operationId":"get_platform_stats_hourly_sourceTag","parameters":[{"name":"sourceTag","in":"path","required":true,"schema":{"type":"string"},"description":"numeric tag or platform slug"},{"name":"period","in":"query","required":false,"description":"24h|7d|30d (default: 24h)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/platform-report":{"get":{"tags":["Platform Report"],"summary":"Full daily platform report","operationId":"get_platform_report","description":"404 if no report exists for the date (today's report generates at 00:05 UTC)","parameters":[{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD (default: today)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/platform-report/dates":{"get":{"tags":["Platform Report"],"summary":"Daily report dates with metadata, newest first","operationId":"get_platform_report_dates","parameters":[{"name":"offset","in":"query","required":false,"description":"int (default 0)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"int (default 90, max 365)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"[{ date, generatedAt, durationMs, errorCount }]"}}}}}}},"/web-search":{"get":{"tags":["Web Search"],"summary":"Web search via SearXNG","operationId":"get_web_search","description":"Auth: API key required (401 without)","parameters":[{"name":"q","in":"query","required":false,"description":"string (required)","schema":{"type":"string"}},{"name":"categories","in":"query","required":false,"description":"general|images|videos|news|...","schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"description":"google|brave|duckduckgo|...","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"en|de|fr|...","schema":{"type":"string"}},{"name":"pageno","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ query, number_of_results, results[], answers[], infoboxes[], suggestions[], cached }"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/keys":{"post":{"tags":["Keys"],"summary":"Create new API key (1 active key on free tier, 5 on paid tiers)","operationId":"post_keys","description":"Requires wallet signature. Save the API key immediately - it cannot be retrieved later. The project block and agreePolicy record which project the key serves and that it accepted the usage policy (attribution, no redistribution); the agreement is stamped server-side. Legacy name-only bodies are still accepted for now.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, apiKey, keyPrefix, wallet, credits, project }"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ name?: string, project: { name, url: \"https://...\", category: \"wallet|explorer|trading_bot|analytics|ai_agent|other\", description, expectedDaily: \"lt1k|1k-10k|10k-100k|100k+\", contact?: \"email or @handle\" }, agreePolicy: true } - project + agreePolicy record which project the key serves and that it accepted the usage policy (attribution, no redistribution); the agreement is stamped server-side. Legacy name-only bodies are still accepted for now."}}}},"parameters":[]}},"/keys/{wallet}":{"get":{"tags":["Keys"],"summary":"List API keys for wallet","operationId":"get_keys_wallet","description":"Auth: wallet signature","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/{wallet}/{id}":{"put":{"tags":["Keys"],"summary":"Rename an active API key (metadata only)","operationId":"put_keys_wallet_id","description":"Auth: wallet signature. Headers: X-Wallet, X-Signature, X-Timestamp, X-Public-Key","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ name: string (1-64) }"}}}},"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]},"delete":{"tags":["Keys"],"summary":"Revoke API key (first call revokes; calling again on a revoked key permanently deletes it)","operationId":"delete_keys_wallet_id","description":"Auth: wallet signature. Headers: X-Wallet, X-Signature, X-Timestamp, X-Public-Key","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/{wallet}/credits":{"get":{"tags":["Keys"],"summary":"Remaining credits and billing info","operationId":"get_keys_wallet_credits","description":"Auth: wallet signature","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/{wallet}/usage":{"get":{"tags":["Keys"],"summary":"Usage breakdown by key and endpoint","operationId":"get_keys_wallet_usage","description":"Auth: wallet signature","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/{wallet}/subscription":{"get":{"tags":["Keys"],"summary":"Subscription details, available upgrades and partnerRequest { status: pending|approved|declined, creditUrl, requestedAt, decidedAt, reason } (null when never requested). billingCycle.end is the paid term end: 30 days for a monthly purchase, 365 for yearly. Buying the same tier again before it ends extends the term; an ended term downgrades the wallet and its keys to Free.","operationId":"get_keys_wallet_subscription","description":"Auth: wallet signature","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/{wallet}/partner-request":{"post":{"tags":["Keys"],"summary":"Apply for the free Partner tier (see usagePolicy.partner)","operationId":"post_keys_wallet_partner_request","description":"Needs an active key created with project details that has made real requests; one open request per wallet (409 while pending). A person opens creditUrl, checks the credit, and approving upgrades every active key on the wallet. Result appears in GET /keys/{wallet}/subscription.","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Request filed"},"400":{"description":"Not eligible yet or invalid body"},"409":{"description":"A request is already pending"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ creditUrl: \"https://... page where the Data by xrpl.to credit is visible\", contact: \"email or @handle\" }"}}}},"security":[{"WalletSignature":[]}]}},"/keys/tiers":{"get":{"tags":["Keys"],"summary":"Available API tiers with live XRP pricing. Developer, Business and Professional are bought for a term (30 days monthly, 365 yearly) and renew by buying the same tier again; Partner is by application.","operationId":"get_keys_tiers","responses":{"200":{"description":"Success"}},"parameters":[]}},"/keys/packages":{"get":{"tags":["Keys"],"summary":"Credit top-up packages with pricing","operationId":"get_keys_packages","responses":{"200":{"description":"Success"}},"parameters":[]}},"/keys/costs":{"get":{"tags":["Keys"],"summary":"Per-endpoint credit costs","operationId":"get_keys_costs","responses":{"200":{"description":"Success"}},"parameters":[]}},"/keys/purchase":{"post":{"tags":["Keys"],"summary":"Create XRP payment request","operationId":"post_keys_purchase","description":"Invoice expires in 30 minutes. After payment, call POST /keys/verify-payment with the tx hash.","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ wallet, type: \"credits\"|\"tier\", package?: \"starter|standard|bulk|mega\", tier?: \"developer|business|professional\", billing?: \"monthly|yearly\" }"}}}},"parameters":[]}},"/keys/verify-payment":{"post":{"tags":["Keys"],"summary":"Verify XRP payment and apply credits/tier","operationId":"post_keys_verify_payment","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ txHash: \"64-char hex\" }"}}}},"parameters":[]}},"/keys/xrp/status/{txHash}":{"get":{"tags":["Keys"],"summary":"Check XRP payment status","operationId":"get_keys_xrp_status_txHash","parameters":[{"name":"txHash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/keys/stripe/checkout":{"post":{"tags":["Keys"],"summary":"Create Stripe checkout session","operationId":"post_keys_stripe_checkout","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ wallet, type, package?, tier?, billing? }"}}}},"parameters":[]}},"/keys/stripe/status/{sessionId}":{"get":{"tags":["Keys"],"summary":"Check Stripe payment status","operationId":"get_keys_stripe_status_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet","in":"query","required":false,"description":"XRPL address that created the session (required)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/keys/payment/{txHash}":{"get":{"tags":["Keys"],"summary":"Look up processed payment by tx hash","operationId":"get_keys_payment_txHash","description":"Auth: wallet signature","parameters":[{"name":"txHash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/{wallet}/logs":{"get":{"tags":["Keys"],"summary":"Recent API request logs for a wallet","operationId":"get_keys_wallet_logs","description":"Auth: wallet signature","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/keys/payments/{wallet}":{"get":{"tags":["Keys"],"summary":"Payment history for wallet","operationId":"get_keys_payments_wallet","description":"Auth: wallet signature","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 200, default 200)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, total, payments[] }"}}}}},"security":[{"WalletSignature":[]}]}},"/keys/invoices/{paymentId}":{"get":{"tags":["Keys"],"summary":"Invoice detail for a payment (sequential INV-YYYY-NNNNN number assigned on first fetch)","operationId":"get_keys_invoices_paymentId","description":"Auth: wallet signature","parameters":[{"name":"paymentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/user/tiers":{"get":{"tags":["User"],"summary":"User tiers with pricing (member, vip, nova, diamond, verified)","operationId":"get_user_tiers","responses":{"200":{"description":"Success"}},"parameters":[]}},"/user/{account}":{"get":{"tags":["User"],"summary":"Get user profile","operationId":"get_user_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}},"post":{"tags":["User"],"summary":"Create user profile","operationId":"post_user_account","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ username?, referredBy? }"}}}},"security":[{"WalletSignature":[]}]},"put":{"tags":["User"],"summary":"Update username (VIP+ required to change an existing one; tier field is admin-only)","operationId":"put_user_account","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ username? }"}}}},"security":[{"WalletSignature":[]}]}},"/user/{account}/perks":{"get":{"tags":["User"],"summary":"Resolved perks (tier + roles merged)","operationId":"get_user_account_perks","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/user/{account}/badges":{"get":{"tags":["User"],"summary":"All unlocked badges","operationId":"get_user_account_badges","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/user/{account}/labels":{"get":{"tags":["User"],"summary":"Get your own wallet labels — private data, owner-authenticated","operationId":"get_user_account_labels","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}},"post":{"tags":["User"],"summary":"Create/update a wallet label (per-tier cap; 402 when limit reached)","operationId":"post_user_account_labels","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ wallet, label (1-50 chars), watching? }"}}}},"security":[{"WalletSignature":[]}]}},"/user/{account}/nfts":{"get":{"tags":["User"],"summary":"NFTs owned (with thumbnails)","operationId":"get_user_account_nfts","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, count, total, nfts[] }"}}}}}}},"/user/badges/meta":{"get":{"tags":["User"],"summary":"Badge system metadata","operationId":"get_user_badges_meta","responses":{"200":{"description":"Success"}},"parameters":[]}},"/user/badges/{badge}/holders":{"get":{"tags":["User"],"summary":"Users holding a specific badge","operationId":"get_user_badges_badge_holders","parameters":[{"name":"badge","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int (max 500)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"int","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, badge, count, total, holders[] }"}}}}}}},"/user/{account}/display-badge":{"put":{"tags":["User"],"summary":"Set displayed badge (must be unlocked)","operationId":"put_user_account_display_badge","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ badge: \"category:id\" | null }"}}}},"security":[{"WalletSignature":[]}]}},"/user/{account}/labels/watched":{"get":{"tags":["User"],"summary":"Only actively-watched wallet labels — private data, owner-authenticated","operationId":"get_user_account_labels_watched","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/user/{account}/labels/{wallet}/watch":{"put":{"tags":["User"],"summary":"Toggle live-watch on a label (per-tier watcher cap)","operationId":"put_user_account_labels_wallet_watch","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ watching: bool }"}}}},"security":[{"WalletSignature":[]}]}},"/user/{account}/labels/{wallet}":{"delete":{"tags":["User"],"summary":"Delete a wallet label","operationId":"delete_user_account_labels_wallet","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"WalletSignature":[]}]}},"/user/{account}/avatar":{"put":{"tags":["User"],"summary":"Set avatar from an owned NFT","operationId":"put_user_account_avatar","description":"Auth: wallet signature","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ nftId: 64-hex }"}}}},"security":[{"WalletSignature":[]}]}},"/user/tier/purchase":{"post":{"tags":["User"],"summary":"Create XRP invoice for user tier (expires 30 min)","operationId":"post_user_tier_purchase","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ tier: \"vip|nova|diamond\", address }"}}}},"parameters":[]}},"/user/tier/verify/{invoiceId}":{"get":{"tags":["User"],"summary":"Verify tier XRP payment (scans fee collector; expired invoices honored if exact payment exists)","operationId":"get_user_tier_verify_invoiceId","parameters":[{"name":"invoiceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/user/tier/stripe":{"post":{"tags":["User"],"summary":"Stripe checkout for user tier","operationId":"post_user_tier_stripe","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ tier, address }"}}}},"parameters":[]}},"/user/tier/stripe/{sessionId}":{"get":{"tags":["User"],"summary":"Check Stripe tier payment status","operationId":"get_user_tier_stripe_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet","in":"query","required":false,"description":"required","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/user/tier/gift/purchase":{"post":{"tags":["User"],"summary":"Gift a tier via XRP invoice","operationId":"post_user_tier_gift_purchase","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ gifterAddress, recipientAddress, tier }"}}}},"parameters":[]}},"/user/tier/gift/verify/{invoiceId}":{"get":{"tags":["User"],"summary":"Verify gift tier payment","operationId":"get_user_tier_gift_verify_invoiceId","parameters":[{"name":"invoiceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/user/tier/gift/stripe":{"post":{"tags":["User"],"summary":"Gift a tier via Stripe","operationId":"post_user_tier_gift_stripe","responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ gifterAddress, recipientAddress, tier }"}}}},"parameters":[]}},"/chat/status":{"get":{"tags":["Chat"],"summary":"Online count + unread status","operationId":"get_chat_status","parameters":[{"name":"wallet","in":"query","required":false,"description":"r-address","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/chat/messages":{"get":{"tags":["Chat"],"summary":"Public chat history","operationId":"get_chat_messages","parameters":[{"name":"limit","in":"query","required":false,"description":"int (max 100, default 50)","schema":{"type":"integer"}},{"name":"before","in":"query","required":false,"description":"unix ms cursor","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/chat/session":{"get":{"tags":["Chat"],"summary":"5-min WebSocket session token","operationId":"get_chat_session","description":"Auth: X-Api-Key","parameters":[{"name":"wallet","in":"query","required":false,"description":"r-address","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}]}},"/chat/access":{"get":{"tags":["Chat"],"summary":"Check chat access for key tier","operationId":"get_chat_access","description":"Auth: X-Api-Key","responses":{"200":{"description":"Success"}},"security":[{"ApiKeyAuth":[]}],"parameters":[]}},"/embed/{md5}":{"get":{"tags":["Embed"],"summary":"Embeddable candlestick chart (HTML iframe)","operationId":"get_embed_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"theme","in":"query","required":false,"description":"dark|light","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"string","schema":{"type":"string"}},{"name":"height","in":"query","required":false,"description":"int","schema":{"type":"integer"}},{"name":"showVolume","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"showLogo","in":"query","required":false,"description":"bool","schema":{"type":"boolean"}},{"name":"logoUrl","in":"query","required":false,"description":"https URL to image (whitelisted formats)","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/embed/score/{md5}":{"get":{"tags":["Embed"],"summary":"Embeddable token safety-score badge (HTML iframe)","operationId":"get_embed_score_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"}},{"name":"theme","in":"query","required":false,"description":"dark|light","schema":{"type":"string"}},{"name":"size","in":"query","required":false,"description":"full - include name + check counts","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/lp-positions/{account}":{"get":{"tags":["LP Positions"],"summary":"AMM LP positions with impermanent loss analysis","operationId":"get_lp_positions_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ result, positions: { <poolId>: { ilPercent, holdValueXrp, poolValueXrp, currentAsset1, currentAsset2, feesEarnedXrp, currentLpBalance, poolShare, ... } } } (uses result: \"success\", not success: true)"}}}}}}},"/thumb/{md5}":{"get":{"tags":["Thumbnails"],"summary":"Token thumbnail (WebP)","operationId":"get_thumb_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"the token id"},{"name":"w","in":"query","required":false,"description":"16|32|40|48|64|96|128 (default: 48)","schema":{"type":"string"}},{"name":"v","in":"query","required":false,"description":"source mtime (ms) — exact match returns immutable 1-year cache headers","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}},"description":"Needs an API key (401 without one): send X-Api-Key, or ?apiKey= where headers cannot be sent. Fetch it from your server and cache it — a key in a public page's <img> src is visible to everyone."}},"/nft-thumb/{hash}":{"get":{"tags":["Thumbnails"],"summary":"NFT image/thumbnail (original format, CSP-sandboxed for SVG)","operationId":"get_nft_thumb_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"},"description":"an NFT's files[].thumbnail.small, .medium or .large from GET /nft/{nftId} (or a collection's logoNft)"}],"responses":{"200":{"description":"Success"}},"description":"Needs an API key (401 without one): send X-Api-Key, or ?apiKey= where headers cannot be sent."}},"/nft-collection-thumb/{hash}":{"get":{"tags":["Thumbnails"],"summary":"NFT collection cover image","operationId":"get_nft_collection_thumb_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"},"description":"the collection's logoImage from GET /nft/collections/{slug}; without one, show /nft-thumb/{logoNft}"}],"responses":{"200":{"description":"Success"}},"description":"Needs an API key (401 without one): send X-Api-Key, or ?apiKey= where headers cannot be sent."}},"/health":{"get":{"tags":["Utilities"],"summary":"Service health check with per-service latency","operationId":"get_health","responses":{"200":{"description":"Success"}},"description":"Service health check. Response: { status, timestamp, version, uptime, services: { database, rippled, cache } }","parameters":[]}},"/testnet/{address}":{"get":{"tags":["Utilities"],"summary":"Live Testnet XRP balance, reserve, sequence and settings of an account, straight from the network","operationId":"get_testnet_address","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}},"/testnet/submit":{"post":{"tags":["Testnet"],"summary":"Submit a SIGNED transaction to Testnet through our own node — the contract of POST /submit with the prefix changed. Nothing here signs or holds a seed; fund an account with POST /faucet first","operationId":"post_testnet_submit","description":"engine_result is PRELIMINARY — only a validated ledger is final; follow hash with GET /testnet/tx/{hash} until validated is true or a validated ledger passes the LastLedgerSequence. A 400 with error_code is the node refusing it before processing; outcome:\"unknown\" (502, 409, or no engine_result) means it may still apply — resolve by hash, never by re-signing on a fresh Sequence. Every response carries hash.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"{ tx_blob, fail_hard? }"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, engine_result, engine_result_code, engine_result_message, tx_json, hash, accepted, applied, broadcast, kept, queued, account_sequence_available, account_sequence_next, validated_ledger_index, outcome? }"}}}},"400":{"description":"tx_blob missing or malformed, or refused by the node (error_code)"},"409":{"description":"Duplicate tx_blob within 30s"},"502":{"description":"Outcome unknown — the transaction may still apply; resolve it by hash"}},"parameters":[]}},"/testnet/tx/{hash}":{"get":{"tags":["Testnet"],"summary":"A Testnet transaction and its final result, from our node: validated, the ledger it closed in, result (meta.TransactionResult), the transaction and its meta. 404 until the node has seen it","operationId":"get_testnet_tx_hash","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"},"description":"64 hex characters"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ hash, validated, ledger_index, result, close_time_iso, tx, meta }"}}}},"400":{"description":"Malformed hash"},"404":{"description":"Not found (the node has not seen it)"}}}},"/docs":{"get":{"tags":["Utilities"],"summary":"This documentation (JSON). Browsers (Accept: text/html) are redirected to the human-readable docs.","operationId":"get_docs","responses":{"200":{"description":"Success"}},"parameters":[]}},"/account/resolve":{"post":{"tags":["Account"],"summary":"Batch-resolve admin-verified destination identity (name, logo, tagRequired). Only verified accounts are returned — absence means unknown, which is the safety signal.","operationId":"post_account_resolve","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["addresses"],"properties":{"addresses":{"type":"array","maxItems":100,"items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Success"}},"parameters":[]}},"/account/{address}/verified":{"put":{"tags":["Account"],"summary":"Set verified destination identity (admin only — never user-settable)","operationId":"put_account_verified","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","logo"],"properties":{"name":{"type":"string","maxLength":60},"logo":{"type":"string","maxLength":200},"tagRequired":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"}}},"delete":{"tags":["Account"],"summary":"Remove verified destination identity","operationId":"delete_account_verified","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"}}}},"/account/{address}/admin":{"get":{"tags":["Account"],"summary":"Full account doc split into editable editorial fields vs read-only ledger/derived state, plus the manualFields lock list, the lockedByChain list (fields tx derives from the ledger) and a derived block (decoded on-chain Domain, attributed domain, desc kind)","operationId":"get_account_admin","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"404":{"description":"Not found"}}},"patch":{"tags":["Account"],"summary":"Edit editorial fields. Each written field is added to manualFields so the owning background service skips it (tokendata + grok-whale-labeler honour this) — null/empty unsets. Raw ledger fields and scam flags are not editable; `domain` returns 409 when the account sets an on-chain Domain, because tx re-derives it from the ledger.","operationId":"patch_account_admin","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"desc":{"type":"string"},"domain":{"type":"string"},"twitter":{"type":"string"},"adminVerified":{"type":"boolean","description":"Vouch this identity. Displays `name` with its logo on consumers of POST /account/resolve, and locks `name` in manualFields so background writers cannot change it. Distinct from `verified`, which is XRPScan's third-party attestation."},"verifiedLogo":{"type":"string"},"verifiedTagRequired":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success"},"400":{"description":"Field not editable"},"401":{"description":"Unauthorized"}}}},"/account/{address}/logo":{"post":{"tags":["Account"],"summary":"Upload an account logo; served self-hosted at GET /api/account-thumb/{address}","operationId":"post_account_logo","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["imageData"],"properties":{"imageData":{"type":"string"}}}}}},"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"413":{"description":"Too large"}}}},"/account-thumb/{address}":{"get":{"tags":["Account"],"summary":"Admin-set account logo image bytes (404 when unset)","operationId":"get_account_thumb","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Image"},"404":{"description":"Not found"}},"description":"Needs an API key (401 without one): send X-Api-Key, or ?apiKey= where headers cannot be sent."}},"/scams/addresses":{"get":{"tags":["Scams"],"summary":"THE canonical scam blocklist: top-level addresses[] is the deduped union of every blocked account (drainers, dust/token spam, phishing, impersonation, fake airdrops, NFT-scam issuers). Check a Destination/counterparty against it BEFORE a user signs. Real-time, never cached (Cache-Control: no-store) — poll every ~5s. Per-category sections (nftPhishing, paymentDrain) are additive metadata and may overlap; addresses is deduped.","description":"THE official blocklist consumption surface: top-level addresses[] is the deduped union of every blocked account (wallet drainers, dust/token spam, phishing, impersonation, fake airdrops, NFT-scam issuers). Check a Destination/counterparty against it BEFORE a user signs. Real-time, never cached (Cache-Control: no-store) - poll every ~5s. Per-category sections (nftPhishing, paymentDrain) are additive metadata and may overlap; addresses is deduped and count === addresses.length.","operationId":"get_scams_addresses","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"wallet_drainer|dust_spam|phishing|impersonation|fake_airdrop|other (optional)"}],"responses":{"200":{"description":"OK"}}}},"/xaman/payload":{"post":{"tags":["Xaman"],"summary":"Create a Xaman sign request — returns { uuid, next.always (open in Xaman), refs.qr_png, refs.websocket_status }. xrpl.to surfaces only (platform key); user_token is refused","description":"Turns a transaction JSON into a Xaman payload: a deep link (next.always) and QR (refs.qr_png) the user opens in their Xaman wallet, signs, and Xaman submits. `txjson: { TransactionType: 'SignIn' }` is the wallet-connect flow (the signed status carries response.account). SourceTag 161803 is stamped when absent. xrpl.to surfaces only (platform key); a customer key is refused because the request would carry xrpl.to's app identity. `user_token` is never accepted — nothing here pushes to a device.","operationId":"post_xaman_payload","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["txjson"],"properties":{"txjson":{"type":"object","description":"XRPL transaction JSON (TransactionType required); SignIn for wallet connect"},"options":{"type":"object","properties":{"submit":{"type":"boolean","default":true},"expire":{"type":"integer","description":"Minutes until the request expires, clamped 1-60","default":10},"return_url":{"type":"object","properties":{"web":{"type":"string"},"app":{"type":"string"}},"description":"https URLs Xaman returns the user to after signing"},"multisign":{"type":"boolean"},"pathfinding":{"type":"boolean"}}},"custom_meta":{"type":"object","properties":{"identifier":{"type":"string","maxLength":40},"instruction":{"type":"string","maxLength":280}}}}}}}},"responses":{"201":{"description":"Created: { uuid, next: { always }, refs: { qr_png, websocket_status }, options }"},"400":{"description":"Invalid body, or Xaman rejected the transaction"},"403":{"description":"Not an xrpl.to surface"},"502":{"description":"Xaman unavailable"}},"parameters":[]}},"/xaman/payload/{uuid}":{"get":{"tags":["Xaman"],"summary":"Sign request status (live, never cached): meta.signed/expired/cancelled, response.account (SignIn answer), response.txid (submitted transaction)","description":"Live status of a payload (never cached): meta.signed / expired / cancelled / app_opened, payload.request_json + expires_in_seconds, response.account (SignIn answer) and response.txid (submitted transaction — confirm on-ledger via /tx/{hash}). The per-user push token is never included. refs.websocket_status from the create response gives the same status as a push.","operationId":"get_xaman_payload","parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"},"description":"Payload uuid from the create response"}],"responses":{"200":{"description":"OK"},"404":{"description":"Payload not found"}}},"delete":{"tags":["Xaman"],"summary":"Cancel an unsigned sign request (xrpl.to surfaces only)","description":"xrpl.to surfaces only (platform key). Returns { uuid, cancelled, reason }.","operationId":"delete_xaman_payload","parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"403":{"description":"Not an xrpl.to surface"},"404":{"description":"Payload not found"}}}},"/presale":{"get":{"tags":["Presale"],"summary":"List presales (open by default)","description":"Public list of presales; status=all includes non-open.","operationId":"get_presale","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"'all' to include non-open"}],"responses":{"200":{"description":"OK"}}},"post":{"tags":["Presale"],"summary":"Create a presale (issuer + sale wallets are provisioned server-side)","description":"Escrow-based presale: issuer + sale wallets provisioned server-side; buyers escrow XRP and claim tokens via CheckCash after finalize.","operationId":"post_presale","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"currencyCode":{"type":"string"},"name":{"type":"string"},"origin":{"type":"string"},"tokenSupply":{"type":"string"},"goalXrp":{"type":"number"},"softCapXrp":{"type":"number"},"durationHours":{"type":"number"},"tradingFee":{"type":"number"},"creatorPct":{"type":"number"},"creatorVestDays":{"type":"number"}}}}}},"responses":{"200":{"description":"OK"}},"parameters":[]}},"/presale/{id}/join":{"post":{"tags":["Presale"],"summary":"Join — checks the wallet can fund the escrow above its reserve, returns the conditional EscrowCreate to sign; an unconfirmed slot may join again, an escrow that already landed is confirmed instead","description":"Returns the conditional EscrowCreate transaction for the buyer to sign.","operationId":"post_presale_id_join","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"presale id"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"amountXrp":{"type":"number"}}}}}},"responses":{"200":{"description":"OK"}}}},"/presale/{id}/confirm":{"post":{"tags":["Presale"],"summary":"Confirm a signed escrow contribution","description":"Confirm an escrow contribution","operationId":"post_presale_id_confirm","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"presale id"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"txHash":{"type":"string"}}}}}},"responses":{"200":{"description":"OK"}}}},"/presale/{id}/finalize":{"post":{"tags":["Presale"],"summary":"Finalize after deadline/goal: capture escrows, deliver claim Checks, seed AMM, blackhole wallets","description":"After deadline or goal: capture escrows, deliver claim Checks, seed AMM, blackhole wallets. Refunding when soft cap missed.","operationId":"post_presale_id_finalize","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"presale id"}],"responses":{"200":{"description":"OK"}}}},"/presale/{id}":{"get":{"tags":["Presale"],"summary":"Presale status (public view: raise, socials, confirmed contributors, vesting; refreshes claim states on success)","description":"Presale status (public view)","operationId":"get_presale_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"presale id"}],"responses":{"200":{"description":"OK"}}}},"/presale/{id}/claim-info":{"get":{"tags":["Presale"],"summary":"Per-buyer claim (CheckCash) or refund (EscrowCancel) transaction to sign","description":"Returns the CheckCash (claim) or EscrowCancel (refund) transaction for the address to sign.","operationId":"get_presale_id_claim-info","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"presale id"},{"name":"address","in":"query","required":true,"schema":{"type":"string"},"description":"contributor r-address"}],"responses":{"200":{"description":"OK"}}}},"/holders/movers/{id}":{"get":{"tags":["Charts & Analytics"],"summary":"Top 24h buyers and sellers by holder balance delta","operationId":"get_holders_movers_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"int per side (default: 20, max 50)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"{ success, took, summary: { top10Hold, top20Hold, top50Hold, top100Hold, frozen }, length (total holders; filtered count when search/minBalance/maxBalance set), richList[]: { account, balance, holding, rank, freeze, frozenByIssuer?, isCreator, xrpBalance, lastActive, name, domain, funder, tradedPct?, tradeCount?, source?, acquisition?, isAMM? } }"}}}}}}},"/token/{md5}/related":{"get":{"tags":["Tokens"],"summary":"Related projects: other tokens and NFT collections that share the audience of this token. An edge means wallets hold both and accounts post about both — it is NOT a wallet link and does not assert a shared operator (see /token/review for that).","description":"Related projects: other tokens and NFT collections that share the audience of this token. An edge means wallets hold both and accounts post about both — it is NOT a wallet link and does not assert a shared operator (see /token/review for that).","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"Token md5"}],"responses":{"200":{"description":"Related projects (an empty list when there are none)","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"took":{"type":"integer","description":"server-side elapsed ms"},"count":{"type":"integer","description":"rows in this response"},"truncated":{"type":"boolean","description":"true when the list was cut off — render as \"N+\""},"subject":{"type":"object"},"related":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["token","collection"]},"md5":{"type":"string"},"collectionId":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"sharedHolders":{"type":"integer","description":"wallets holding both"},"posters":{"type":"integer","description":"distinct accounts that posted about both"},"wallets":{"type":"array","items":{"type":"string"},"description":"a sample of the shared wallets"},"posts":{"type":"array","items":{"type":"object"}},"sameProject":{"type":"boolean","description":"true when on-chain data ties the two to one project"}}}}}}}}},"404":{"description":"Token not found"}}}},"/nft/collections/{slug}/related":{"get":{"tags":["NFTs"],"summary":"Related projects: other tokens and NFT collections that share the audience of this collection. An edge means wallets hold both and accounts post about both — it is NOT a wallet link and does not assert a shared operator (see /token/review for that).","description":"Related projects: other tokens and NFT collections that share the audience of this collection. An edge means wallets hold both and accounts post about both — it is NOT a wallet link and does not assert a shared operator (see /token/review for that).","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Collection slug, or the identity form <issuer>:<taxon>"}],"responses":{"200":{"description":"Related projects (an empty list when there are none)","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"took":{"type":"integer","description":"server-side elapsed ms"},"count":{"type":"integer","description":"rows in this response"},"truncated":{"type":"boolean","description":"true when the list was cut off — render as \"N+\""},"subject":{"type":"object"},"related":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["token","collection"]},"md5":{"type":"string"},"collectionId":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"sharedHolders":{"type":"integer","description":"wallets holding both"},"posters":{"type":"integer","description":"distinct accounts that posted about both"},"wallets":{"type":"array","items":{"type":"string"},"description":"a sample of the shared wallets"},"posts":{"type":"array","items":{"type":"object"}},"sameProject":{"type":"boolean","description":"true when on-chain data ties the two to one project"}}}}}}}}},"404":{"description":"Collection not found"}}}},"/testnet/health":{"get":{"tags":["Testnet"],"summary":"Both collectors' head ledger against the network, and whether that is current","operationId":"get_testnet_health","parameters":[],"responses":{"200":{"description":"Success"}}}},"/testnet/tokens":{"get":{"tags":["Testnet"],"summary":"Testnet tokens. tvl is the token's XRP pool valued on both sides (twice its XRP reserve); a token with no XRP pool has none","operationId":"get_testnet_tokens","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"vol24h | holders | trades24h | trustlines | tvl | firstSeen (default vol24h)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-100 (default 50)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"}}}},"/testnet/tokens/{md5}":{"get":{"tags":["Testnet"],"summary":"A Testnet token with its AMM pool","operationId":"get_testnet_tokens_md5","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"md5(issuer_currency)"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/tokens/{md5}/holders":{"get":{"tags":["Testnet"],"summary":"Holders of a Testnet token, largest first","operationId":"get_testnet_tokens_md5_holders","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"md5(issuer_currency)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-200"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/tokens/{md5}/offers":{"get":{"tags":["Testnet"],"summary":"The order book of a Testnet token against XRP","operationId":"get_testnet_tokens_md5_offers","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"md5(issuer_currency)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"per side, 1-100"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/tokens/{md5}/trades":{"get":{"tags":["Testnet"],"summary":"Fills of a Testnet token, newest first","operationId":"get_testnet_tokens_md5_trades","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"md5(issuer_currency)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-200"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/tokens/{md5}/ohlc":{"get":{"tags":["Testnet"],"summary":"5-minute candles of a Testnet token","operationId":"get_testnet_tokens_md5_ohlc","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string"},"description":"md5(issuer_currency)"},{"name":"from","in":"query","required":false,"schema":{"type":"integer"},"description":"unix ms (default 7 days ago)"},{"name":"to","in":"query","required":false,"schema":{"type":"integer"},"description":"unix ms (default now)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-5000"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/accounts/{address}":{"get":{"tags":["Testnet"],"summary":"A Testnet account as the collector last saw it, with its trust lines, resting offers and last 20 trades","operationId":"get_testnet_accounts_address","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"},"description":"An XRPL address"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/amm":{"get":{"tags":["Testnet"],"summary":"Testnet AMM pools, deepest first. A pool of two tokens has token and token2 (in a fixed order, by code) and xrp 0; its spot is token2 per token","operationId":"get_testnet_amm","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-100"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"}}}},"/testnet/amm/{account}":{"get":{"tags":["Testnet"],"summary":"A Testnet AMM pool by its account","operationId":"get_testnet_amm_account","parameters":[{"name":"account","in":"path","required":true,"schema":{"type":"string"},"description":"The pool account"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/nft/collections":{"get":{"tags":["Testnet"],"summary":"Testnet NFT collections, by issuer and taxon. volume/sales are all-time XRP sales; vol24h/sales24h the last 24 h, recounted every minute","operationId":"get_testnet_nft_collections","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"volume | items | sales | time | vol24h | sales24h (default volume)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-100"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"}}}},"/testnet/nft/collections/{id}":{"get":{"tags":["Testnet"],"summary":"A Testnet NFT collection","operationId":"get_testnet_nft_collections_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"issuer:taxon"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/nft/collections/{id}/nfts":{"get":{"tags":["Testnet"],"summary":"The live NFTs of a Testnet collection","operationId":"get_testnet_nft_collections_id_nfts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"issuer:taxon"},{"name":"owner","in":"query","required":false,"schema":{"type":"string"},"description":"only this owner's"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-200"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/nft/history":{"get":{"tags":["Testnet"],"summary":"Testnet NFT events, newest first","operationId":"get_testnet_nft_history","parameters":[{"name":"collection","in":"query","required":false,"schema":{"type":"string"},"description":"issuer:taxon"},{"name":"nft","in":"query","required":false,"schema":{"type":"string"},"description":"NFTokenID"},{"name":"account","in":"query","required":false,"schema":{"type":"string"},"description":"the sending account (one of the three is required)"},{"name":"type","in":"query","required":false,"schema":{"type":"string"},"description":"MINT | BURN | LIST | BID | CANCEL | SALE | TRANSFER | MODIFY"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"1-200"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"from 1"}],"responses":{"200":{"description":"Success"},"400":{"description":"One of collection, nft or account is required"},"404":{"description":"Not found"}}}},"/testnet/nft/{id}":{"get":{"tags":["Testnet"],"summary":"A Testnet NFT with the offers standing on it","operationId":"get_testnet_nft_id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"NFTokenID"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/testnet/nft/{id}/offers":{"get":{"tags":["Testnet"],"summary":"The offers standing on a Testnet NFT, split by side","operationId":"get_testnet_nft_id_offers","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"NFTokenID"}],"responses":{"200":{"description":"Success"},"400":{"description":"Malformed id"},"404":{"description":"Not found"}}}},"/rpc":{"post":{"tags":["submit"],"operationId":"post_rpc","parameters":[],"responses":{"200":{"description":"{ success, took, method, result (the node's own result, verbatim) }"}},"summary":"The XRP Ledger's own READ commands against MAINNET — the twin of POST /testnet/rpc, so a developer who learned the sandbox changes the prefix and nothing else. Reads only (submitting is POST /submit); the node's in-band error (actNotFound, entryNotFound) rides in result with a 200, as on the node","description":"Same list as /testnet/rpc: account_channels, account_currencies, account_info, account_lines, account_nfts, account_objects, account_offers, account_tx, amm_info, book_changes, book_offers, channel_verify, deposit_authorized, feature, fee, gateway_balances, get_aggregate_price, ledger, ledger_closed, ledger_current, ledger_data, ledger_entry, ledger_header, ledger_index, manifest, mpt_holders, nft_buy_offers, nft_history, nft_info, nft_sell_offers, nfts_by_issuer, noripple_check, owner_info, ping, random, ripple_path_find, server_definitions, server_info, server_state, simulate, transaction_entry, tx, tx_history, tx_reduce_relay, vault_info, version. subscribe, unsubscribe and path_find need a session — use the WebSocket"}},"/presale/{id}/refund-info":{"get":{"tags":["presale"],"operationId":"get_presale_id_refund_info","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"address","in":"query","required":false,"description":"contributor r-address","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}},"summary":"Alias of claim-info"}},"/ai/models":{"get":{"tags":["ai"],"operationId":"get_ai_models","parameters":[],"responses":{"200":{"description":"OK"}},"summary":"Models available for inference, with cost in cents per query and each model's published intelligence index (Artificial Analysis, reconciled against OpenRouter's benchmarks API)"}},"/openapi.json":{"get":{"tags":["utilities"],"operationId":"get_openapi_json","parameters":[],"responses":{"200":{"description":"OK"}},"summary":"OpenAPI 3.1 spec for the whole API (270+ paths)"}},"/testnet/fixtures":{"get":{"tags":["testnet"],"operationId":"get_testnet_fixtures","parameters":[],"responses":{"200":{"description":"{ network_id, generated_at, age_seconds, population, accounts: { issuer, holders[], trader, busy[] }, tokens[], nft, objects, catalogue[] }"}},"summary":"What the simulation keeps alive on Testnet: live accounts, its tokens (tokens[]: name, currency, issuer, holders, amm, role — stablecoin | deep (the high-liquidity pool) | volatile (a thin pool, swung every round) | crowd — with a note saying what each does, and peg_usd on the stablecoin), its collections (collections[]: name, issuer, taxon, role blue-chip | drop, note, items), an NFT with offers, one of every ledger object, and a real transaction of each type (catalogue[]: id, kind, about, result, hash, and tx — the JSON it sent, without fee, sequence, expiry or signature, a working template for that variation) — start here","description":"Rebuilt every few minutes by the simulation; age_seconds past a few minutes means Testnet was reset and it is catching up."}},"/testnet/rpc":{"post":{"tags":["testnet"],"operationId":"post_testnet_rpc","parameters":[],"responses":{"200":{"description":"{ success, took, method, result (the node's own result, verbatim) }"}},"summary":"The XRP Ledger's own READ commands against our Testnet node — the half of Testnet that is not in the index: account_objects, book_offers, amm_info, ledger_entry, server_info and the rest. Reads only (submitting is POST /testnet/submit); the node's in-band error (actNotFound, entryNotFound) rides in result with a 200, as on Mainnet","description":"Every public read command of rippled's own table (src/xrpld/rpc/detail/Handler.cpp, Role::USER), minus the ones that sign or submit and the ones that need a session: account_channels, account_currencies, account_info, account_lines, account_nfts, account_objects, account_offers, account_tx, amm_info, book_changes, book_offers, channel_verify, deposit_authorized, feature, fee, gateway_balances, get_aggregate_price, ledger, ledger_closed, ledger_current, ledger_data, ledger_entry, ledger_header, ledger_index, manifest, mpt_holders, nft_buy_offers, nft_history, nft_info, nft_sell_offers, nfts_by_issuer, noripple_check, owner_info, ping, random, ripple_path_find, server_definitions, server_info, server_state, simulate, transaction_entry, tx, tx_history, tx_reduce_relay, vault_info, version (the Clio-only ones answer unknownCmd on a node that is not Clio, which is itself the answer). subscribe, unsubscribe and path_find are WebSocket commands — open wss://s.altnet.rippletest.net:51233 (or your own node) and send them there"}}}}