XRPL.to Token Analytics
REMOTE · API.XRPL.TO
XRP Ledger tokens, AMM pools, NFTs, accounts and transactions: prices, holders, trades and history
Available components
Last scanned (19 hours ago)
Scores higher than 55% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Crypto and Web3
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (delete_note). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability55
- 53% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 28792 tokens (~299/item across 96 items; 89 tools + 7 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management50
- Stability observed for 15 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage96
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 87% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 91 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_account_ancestry” rewrote its description, which is the text the model reads security
- Tool “get_account_transactions” rewrote its description, which is the text the model reads security
- Tool “get_amm_pools” rewrote its description, which is the text the model reads security
- Tool “get_network_activity” rewrote its description, which is the text the model reads security
- Tool “get_nft_collection” rewrote its description, which is the text the model reads security
- Tool “get_payment_flows” rewrote its description, which is the text the model reads security
- Tool “get_token_flow” rewrote its description, which is the text the model reads security
- “get_amm_pools” added an optional parameter “history” cosmetic
- “get_amm_pools” added an optional parameter “since” cosmetic
- “get_amm_pools” added an optional parameter “until” cosmetic
- “get_network_activity” added an optional parameter “accounts_by_day” cosmetic
- “get_network_activity” added an optional parameter “type” cosmetic
- “get_nft_collection” added an optional parameter “since” cosmetic
- “get_nft_collection” added an optional parameter “until” cosmetic
- “get_tokens_by_category” added an optional parameter “days” cosmetic
- “get_tokens_by_category” added an optional parameter “since” cosmetic
- “get_tokens_by_category” added an optional parameter “until” cosmetic
- “get_account_transactions” reworded the description of “summary” cosmetic
- “get_amm_pools” reworded the description of “amm_account” cosmetic
- “get_network_activity” reworded the description of “by” cosmetic
- “get_network_activity” reworded the description of “daily” cosmetic
- “get_network_activity” reworded the description of “hours” cosmetic
- “get_nft_collection” reworded the description of “rank” cosmetic
- “get_tokens_by_category” reworded the description of “min_holders” cosmetic
- “get_tokens_by_category” reworded the description of “sort” cosmetic
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 0
- Resource “Public API endpoint catalog for api_get (192 endpoints)” was removed ▼ functional
- New resource “Public API endpoint catalog for api_get (193 endpoints)” functional
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 0
- Tool “get_account_objects” rewrote its description, which is the text the model reads security
- Tool “get_account_transactions” rewrote its description, which is the text the model reads security
- Tool “get_holders” rewrote its description, which is the text the model reads security
- New tool “get_trader_rotations” functional
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
- Resource “Public API endpoint catalog for api_get (187 endpoints)” was removed ▼ functional
- New resource “Public API endpoint catalog for api_get (192 endpoints)” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://api.xrpl.to/v1/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=xrpl.to | CN=WE1,O=Google Trust Services,C=US | 14 Oct 2026 | 12 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | b4a45687b9df2f1b13e09759a3181e0d |
| SANs: xrpl.to, *.xrpl.to | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.xrpl.to. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| to. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.xrpl.to/v1/mcp | Verified | 200 | |
| http (plaintext) | http://api.xrpl.to/v1/mcp | HTTPS enforced | 301 | https://api.xrpl.to/v1/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
analyze_token_risk ~138
Risk review for a token: an overall risk score, how many risk and positive signals fired, how much supply the creator controls, and linked prior launches by the same operator with their dead-token history. Returns: score (1-10, higher is riskier) and riskLevel, riskCount and positiveCount (how many signals fired; which ones is not published), supplyControl (creator wallet and escrow %), creatorFamily (prior launches, dead/verified counts, partial flag), creatorTokens, creatorService, creatorFundedBy. Holder concentration is in get_holders.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
api_get ~170
Call ANY documented public xrpl.to GET endpoint not covered by a dedicated tool (to tell a developer how to call the REST API from their own code, use get_api_docs) (the long tail: NFT collections, charts, platform stats, account balances/objects/offers, ledger, tx explain, pairs, richlists…). Read the resource xrplto://reference/api-endpoints for the full list with parameters. Only paths in the public docs are allowed; auth-gated and admin endpoints are refused. Returns: the endpoint's JSON response, arrays shrunk to fit.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Endpoint path with params filled in, e.g. /account/balance/rXXXX or /nft/collections/{slug}/holders |
| query | object | – | Optional query parameters as string values |
No output schema declared.
No examples provided.
cancel_job ~58
Stop a background job started with background: true. Returns: {job_id, job_status: cancelled}, or the status it had already ended with and note: already ended.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The job_id the background call returned |
No output schema declared.
No examples provided.
check_domain ~322
Is a website a known XRPL scam, how old is its domain, and which XRPL accounts does it claim? Without a domain, the newest entries of the phishing-domain list with what each impersonates. Checks the domain and each parent domain against xrpl.to's phishing-domain list (the list GET /v1/scams serves), reads the public registration record (RDAP), and reads the site's xrp-ledger.toml: the accounts it lists and the people it names. With `account`, it checks the link BOTH ways, the standard XRPL account verification: the site lists the account AND the account's own on-ledger Domain field names the site. Each half needs a key the other side cannot use (the site's to publish the file, the account's to set Domain), so a two-way match means one party controls both; either half alone is only a claim. Returns: {domain, listed, matched, status, since, registration {registered, ageDays, expires, registrar, status[], nameservers[]}, toml {url, found, accounts[] {address, network, desc}, principals[]}, accountCheck {account, listedInToml, accountDomain, domainMatches, verified}}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | Optional r-address: verify it and the domain claim each other |
| domain | string | – | A domain or a URL, e.g. xrpl-promotion.net or https://app.example.com/claim |
| limit | integer | – | Without a domain: how many of the newest listed phishing domains |
No output schema declared.
No examples provided.
check_scam ~91
Check an XRPL account against the scam blocklist (drainers, phishing, impersonation) plus account-freshness advisory. get_wallet_risk already runs this check — call check_scam alone for a quick yes/no, or on counterparties. Returns: is_scam, category, reason, source plus first_seen / age_seconds / new_account advisory.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
decode_xrpl ~256
Decode XRPL encodings exactly as the protocol defines them, without guessing: a transaction blob (hex) to its JSON, flags and memo text, plus its hash to look up with get_transaction; an NFTokenID to its flags, transfer fee, issuer, taxon and sequence; an X-address to its classic address and destination tag, or a classic address and tag to its X-address; a currency code between its 40-hex form and its text; an MPTokenIssuanceID to its issuer and sequence; a CTID to its ledger, transaction index and network; a public key to the address it derives. Returns: {kind, ...the decoded fields}.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | Optional; read from the value when omitted (64 hex characters are read as an NFTokenID, 66 starting 02, 03 or ED as a public key) |
| tag | integer | – | With a classic address: the destination tag to put in the X-address |
| value | string | yes | The thing to decode: hex blob, NFTokenID, X-address or classic address, currency code or text, MPTokenIssuanceID, CTID, public key (to its address) |
No output schema declared.
No examples provided.
delete_note ~31
Delete one saved note by id. Returns: {deleted: true|false}.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
No output schema declared.
No examples provided.
describe_bot_activity ~180
Characterize whether a wallet trades like a bot, from the transactions it SIGNED: send rate, interval regularity (bots fire at near-constant spacing), and transaction-type mix. The account history also lists every payment, trade or swap that merely touched the account; those are other accounts' activity, so an issuer, a pool or an exchange deposit address is not judged on them. Returns: {sentCount, touchedCount, spanHours, txPerDay, intervalRegularity 0-1, typeMix, verdict, signed {transactions, activeHours, byHourUtc[24], busiestHoursUtc, feesXrp, since}}. signed counts every transaction the account itself signed since the record began, per UTC hour of day: when an account acts.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| limit | integer | – | – |
No output schema declared.
No examples provided.
explain_result_code ~246
What an XRPL transaction result code means, read from the rippled source this server runs: its class (tes, tec, tef, tel, tem, ter) with what the class implies, quoted from TER.h (applied or not, fee claimed or not, forwarded, whether it can still succeed); its number (tec numbers are stored in metadata); rippled's one-line description (TER.cpp); and every place the engine returns it, each with its function, the section and the conditions it sits in, which say WHEN the code fires (tecUNFUNDED_PAYMENT, for one, is returned only for a direct XRP payment). Use it for "my transaction failed with X" before search_rippled_source. Returns: {code, number, class {prefix, meaning[], url}, description, url, returnedAt[] {file, line, function, section?, conditions[], comments[], at, url}, more, testFiles {count, sample[]}, commit}.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The result code, e.g. tecPATH_DRY, tefPAST_SEQ, telINSUF_FEE_P, terQUEUED |
No output schema declared.
No examples provided.
find_arb_pairs ~75
Check a token for an arbitrage gap between its AMM spot price and the live order book (buy cheap on one venue, sell dear on the other). Returns: {ammSpot, bestBid, bestAsk, arbGapPct, direction} or none.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
find_sandwich_attacks ~529
Sandwich/MEV detection three ways. With victim (any account; add id to keep one token): every ledger in the last days (default 60) where another wallet sandwiched its trades, with each bot, the wallet that funded it (fleets) and what the bot made: "was I sandwiched, by whom". With account (a bot wallet, or the funder of a bot fleet; add id to keep one token): every sandwich that wallet or the wallets it activated ran over the last days (default 60): ledgers where one of them traded a token, another account's same-side trade filled next, and the same wallet traded back, by the ledger's own fill order; with victims, tokens and the XRP the bots netted. With id (a token), scan that token's fills (its latest, or with days every fill in that window) for the pattern, bracketers grouped by funder (byFunder): wallets that BUY and SELL it in one ledger (round-trips), and the subset where a third party traded the same side bracketed between the two legs by on-chain fill order. Because XRPL orders a ledger by canonical hash shuffle (not fee/time), a one-off bracket is mostly chance — the real signal is a REPEAT bracketer across many ledgers. Returns: token mode {sameLedgerRoundTrips, bracketedRoundTrips, repeatBracketers[], topBracketers[] {wallet, bracketedLedgers, distinctVictims, direction, funder}, byFunder[]}; account mode {sandwiches, botNetXrp, byWallet[], byToken[], victims[], recent[]}; victim mode {sandwiched, botsNetXrp, byBot[] {bot, funder, sandwiches, botNetXrp}, byFunder[], recent[]}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | A bot wallet or the funder of a bot fleet (wallet mode) |
| days | integer | – | How many days to look back from until (in token mode, reads every fill of the window instead of the latest) |
| id | string | – | Token md5 or slug (token mode; with account or victim, the one token to check) |
| limit | integer | – | – |
| until | string | – | The end of the window, ISO date or Unix ms (default now), to look at a past day |
| victim | string | – | An account to check as the VICTIM: who sandwiched its trades (victim mode) |
No output schema declared.
No examples provided.
find_snipers ~139
Find the earliest buyers of a token (snipers) — the first wallets to buy after launch, with how many seconds after the first trade and how much they took. Coordinated early buying is a manipulation signal. Returns: snipers[] {account, secsAfterFirst, tokensBought, xrpPaid (XRP legs only), paidOther {<currency>.<issuer>: amount} (buys paid in another token), ledger}, firstTradeTime, windowBuyers.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| window_secs | integer | – | Seconds after the first trade to count as a sniper (default 300) |
No output schema declared.
No examples provided.
find_wallets ~281
Which XRPL wallets belong to a person, project or website — the reverse of identify_wallet_owner ("what is @JoelKatz's wallet?"). Give an X handle, a domain or an exact name; returns every account xrpl.to's index ties to it with WHERE each tie comes from, and reads the candidates' xrp-ledger.toml files. A wallet whose on-ledger Domain names a site that lists it back in [[ACCOUNTS]] is controlled by that site's operator (two keys agree), and the file's [[PRINCIPALS]] say whom the site names. A token or NFT collection whose metadata merely names a handle is the launcher's claim, not the handle owner's: famous handles collect dozens of tribute tokens, and launchpad TOMLs are generated from what the launcher typed. Returns: {query, xProfile, siteToml, candidates[] {account, name, balanceXrp, inception, tier, evidence, labelSource, domain, sharedHost, toml {listsAccount, principals[]}}, counts, note}.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | A website domain, e.g. distributedagreement.com |
| handle | string | – | X (Twitter) handle, with or without @ |
| limit | integer | – | – |
| name | string | – | An exact name as the index labels it (case-sensitive) |
No output schema declared.
No examples provided.
fund_testnet_account ~156
Send Testnet XRP (worthless, the XRP Ledger TESTNET only) from xrpl.to's faucet to an address: the faucet's standard grant, one per address every 24 hours. The one tool here that sends anything; it never touches Mainnet and signs nothing for the caller. Use it to activate or top up a Testnet account for building and testing (get_testnet lists the Testnet economy to try things against). Returns: {network: "testnet", destination, amount, hash, cooldownHours, explorer (testnet.xrpl.org), readBack (xrpl.to's API)} or {error, retryAfterSeconds?}.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | The Testnet r-address to fund |
No output schema declared.
No examples provided.
get_account_ancestry ~154
Who activated an account and who it activated (funding lineage), with tokens launched along the chain. An API key reads the upward path: who an account activated (direction down or both) is for xrpl.to's own surfaces. Each child carries childrenCount (the wallets IT activated), and descendants totals two levels down, so a family tree needs one call, not one per child. Returns: ancestors[] (who funded whom, depth), children[] (accounts it activated, up to limit, each with childrenCount), descendants {children, grandchildren}, tokens launched along the chain.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| direction | string | – | – |
| limit | integer | – | Max children returned |
No output schema declared.
No examples provided.
get_account_info ~90
XRPL account profile: balance, activation, name/labels, flags. Returns: balance, reserve/ownerCount, inception/parent (activator), name/domain labels, flags, blackholed, scam flags; for a deleted account {deleted, created, activatedBy, fundedXrp, deletedTo, deleteTx} instead of "not found".
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
get_account_nfts ~146
NFTs owned by an XRPL account, and what they are worth: the ledger's own list (a first page) plus every held NFT grouped by collection, each valued at its collection's floor (the cheapest ask) and at what its sales have averaged. Returns: nfts[] (ledger entries), byCollection {nfts, collections, valueAtFloorXrp, valueAtAvgSaleXrp, unpricedNfts, neverSoldNfts, top[] {collection, slug, nfts, floorXrp, valueAtFloorXrp, sales, avgSaleXrp, valueAtAvgSaleXrp}}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
get_account_objects ~499
Everything an XRPL account owns or is owed on the ledger, summarised by type in ONE call (with top_owners instead, the accounts owning the most objects or Tickets ledger-wide) — escrows (XRP locked, finishable now, next unlock, never-cancellable), checks (SendMax totals by asset, destinations, expired), payment channels (XRP remaining), offers, NFT offers (sell/buy, destination-locked, to whom), tickets, trust lines, signer list, deposit preauths, DID, oracles, MPT issuances/holdings, credentials, domains, vaults — each split into outgoing (this account created it) and incoming (this account is the destination). Reads the validated ledger, up to 4,000 objects (truncated flag beyond); with a type filter it walks up to 40,000 directory entries, and signer_list / did are read directly by their fixed ID. Use this instead of paging account_objects by hand. Returns: {account, ledger_index, total, truncated, byType{<LedgerEntryType>: {count, …totals}}, samples{<LedgerEntryType>: first 3, times as ISO dates}}; MPTokenIssuance carries issuances[] {mptIssuanceId, ticker, name, issuerName, description (metadata decoded), assetScale, outstanding, maximum, transferFee, flags (requireAuth, canTransfer, canTrade, canClawback, canLock, canEscrow, locked)} and MPToken carries holdings[] {mptIssuanceId, units, flags (authorized, locked)}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | r-address (or CAIP-10 xrpl:0:r…) |
| limit | integer | – | With top_owners: how many accounts |
| top_owners | boolean | – | Instead, no account needed: the accounts on the whole ledger that own the most objects (with type ticket, the most Tickets; with type nft_page, the most NFTs), read live; complete for every account o… |
| type | string | – | Optional filter, as account_objects takes it: escrow, check, payment_channel, offer, nft_offer, ticket, state, signer_list, deposit_preauth, did, oracle, mptoken, mpt_issuance, credential, permission… |
No output schema declared.
No examples provided.
get_account_transactions ~771
Transactions of an XRPL account (payments, trades, trust lines, NFT and AMM activity) from the full history, newest first or (order oldest) from its first transaction: how a wallet was funded and where its first tokens came from. Filter by transaction type and by date range. summary true counts the whole range by type and result instead of listing it, and adds up what the account received and sent by asset ("what did it send and receive in October"). counterparty (one or more r-addresses) returns every transfer between this account and those wallets over the whole history, by asset, both directions, with dates and totals — "what did the creator send these wallets" in one call (it reads this account's transactions for 25 s, or 10 minutes with background: true; start from whichever side has the shorter history). Returns: txs[] with hasMore + marker for paging (an MPT payment carries deliveredMpt {units, ticker, mptIssuanceId}, already scaled by the token's AssetScale, and the page mpts {<id>: {ticker, name, scale, issuer, slug}}); with summary: {sentByAccount, sentByOthers, counts {<type>: {total, sent, results}}, received[] and sent[] {asset, transfers, total}, toSelf[]?, scanned, complete, sentInRange (with since: exactly how many transactions the account sent in the range, of every type and result, from its Sequence and TicketCount at both ends, even when the scan stops early)} (sent: signed by this account; the rest were other accounts' transactions that touched it); with counterparty: {flows[] {counterparty, transfers, accountToCounterparty {<asset>: total}, counterpartyToAccount, other {<type>: n}, first, last, rows[] {date, from, to, type, amount, asset, hash}}, scanned, complete}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| background | boolean | – | Run as a background job for up to 10 minutes, for more than 25 s of reading: answers at once with a job_id; get_job returns the result |
| counterparty | string | – | Comma-separated r-addresses (up to 25): only transfers and other transactions between this account and them, totalled |
| limit | integer | – | – |
| marker | – | – | Paging: the marker a previous call returned |
| min_xrp | number | – | Instead: only the XRP transfers of at least this many XRP into or out of the account (Payment, CheckCash, AccountDelete; what arrived), read for up to 25 s (tens of thousands of transactions; backgro… |
| order | string | – | oldest reads forward from the account's first transaction |
| since | string | – | ISO date or date-time: only transactions in ledgers closed at or after it |
| summary | boolean | – | Count the range by type and result, and total what it received and sent by asset, instead of listing it (reads for up to 25 s, tens of thousands of transactions; past that the counts say they are a f… |
| types | string | – | Comma-separated TransactionTypes, e.g. AMMDeposit,AMMWithdraw |
| until | string | – | ISO date or date-time: only transactions in ledgers closed before it (a day is since 2025-06-01, until 2025-06-02) |
No output schema declared.
No examples provided.
get_account_trustlines ~162
Token holdings (trust lines with balances) of an XRPL account. With valued true: every holding priced in XRP (a token at its current price, an AMM LP token at its share of the pool), largest first, with the total. Returns: lines[] with currency, issuer, balance, limit, flags plus token names; valued: {xrp {total, spendable}, holdings, tokensValueXrp, lines[] {currency, issuer, name, md5, balance, valueXrp, lpPool?}}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| limit | integer | – | – |
| valued | boolean | – | Price every holding in XRP and total them (what the account's tokens and LP positions are worth) |
No output schema declared.
No examples provided.
get_amm_pools ~951
AMM pools for a token, or the whole ledger's pools ranked when no token is given (by 24h volume, liquidity, APY, fees or creation). tradingFee is in units of 1/100,000: 197 = 0.197%, 1000 = 1%, the maximum. apy24h/apy7d carry the window's volume, fees, trades and liquidity in XRP. With flows, the pools with the largest net deposits and withdrawals over a window. With history, one pool's liquidity over time, month by month (since/until). With by_token, tokens ranked by how many pools they are in. With performance, what providing liquidity to one pool earned over N days: fees against impermanent loss, per LP token. Returns: pools[] with ammAccount, asset1/asset2, currentLiquidity, tradingFee, apy24h/7d {apy, volume, fees, trades, liquidity}, lpBurnedPercent, lpHolderCount, status.
| Name | Type | Req | Description |
|---|---|---|---|
| amm_account | string | – | With performance, traders or history: the pool's AMM account instead of a token |
| by_token | boolean | – | When no token is given: tokens ranked by how many active AMM pools they are in (either side), XRP counted apart |
| closed | boolean | – | When no token is given: the pools that closed (their AMM left the ledger after the last liquidity was withdrawn) in the last `days`, largest final withdrawal first, and the pools emptied but still on… |
| created_days | integer | – | When no token is given: how many pools were created in the last N days (still active or already emptied), with the largest of them by liquidity now |
| days | integer | – | With performance or tvl_change: the window, ending now (tvl_change defaults to 7) |
| fee_changes | boolean | – | When no token is given: every change of a pool's trading fee by liquidity-provider votes (AMMVote) in the last `hours`: the pool, the voter, the fee it voted for, and the fee before and after |
| fee_tiers | boolean | – | When no token is given: how many active pools charge each trading fee, the 1% maximum and no fee at all included (optionally only pools with at least min_liquidity XRP) |
| flows | boolean | – | When no token is given: the pools with the largest net deposits and net withdrawals over the last `hours`, from every AMMDeposit, AMMWithdraw and AMMCreate |
| history | boolean | – | With id (the token's XRP pool) or amm_account: the pool's reserves and value in XRP over time, month by month with the change, and day by day for a window of up to 92 days. since/until pick the windo… |
| hours | integer | – | With flows: the window, ending now |
| id | string | – | Token md5 or slug; omit to rank every pool |
| limit | integer | – | – |
| min_liquidity | number | – | When no token is given: only pools with at least this much liquidity, in XRP (7-day figure) |
| performance | boolean | – | With id (the token's XRP pool) or amm_account: what providing liquidity earned over the last `days`, per LP token: fee income, impermanent loss against holding the two assets, and the net |
| since | string | – | With history: start of the window, ISO date |
| sort | string | – | Ranking when no token is given (liquidity, apy and fees rank the 7-day figures) |
| token_pairs | boolean | – | When no token is given: the pools that pair two tokens (no XRP), ranked by value in XRP, a token priced only where its own XRP pool holds 1,000 XRP or more |
| traders | boolean | – | With id (the token's XRP pool) or amm_account: how many distinct accounts swapped through that pool over the last `days` (default 7), with the largest by XRP volume |
| tvl_change | boolean | – | When no token is given: the pools whose liquidity (TVL, in XRP) grew and shrank the most over the last `days`, from xrpl.to's pool snapshots (deposits, withdrawals and price moves together; flows giv… |
| until | string | – | With history: end of the window, ISO date (default now) |
No output schema declared.
No examples provided.
get_api_docs ~212
xrpl.to's own REST and WebSocket API from its published docs (the same as GET https://api.xrpl.to/v1/docs and https://xrpl.to/docs), for a developer calling xrpl.to from their own code: an endpoint's exact URL, method and parameters, the key header and rate limits, the WebSocket streams and their messages, error codes. The tools on this server are not the REST API: answer "how do I call xrpl.to for X" with what this returns. Returns: {query, baseUrl, keyHeader, keyNotes, count, endpoints[] {method, url, section, description, params, body, auth, messages, response}, topics[] {name, content}}.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Endpoints (default 8, max 20) |
| query | string | yes | What to call or know, e.g. "ohlc candles", "websocket prices", "rate limits", "submit transaction", "api key" |
No output schema declared.
No examples provided.
get_cex_cashouts ~241
Detect XRP a wallet sent to centralized exchanges and other custodial services (Binance, Coinbase, Uphold, Gate.io…): accounts that many wallets pay under their own destination tags, named from our account registry, not a hardcoded list. Its latest transactions (up to 200), or with all_history its whole history (up to 10,000 transactions), for "how much has it ever sent to exchanges". Named fee or platform accounts it paid are listed apart (otherServices) and not counted. Returns: cashouts[] {exchange, counterparty, xrp, txCount}, totalXrp, otherServices[], scanned, complete (all_history).
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| all_history | boolean | – | Read the whole history instead (25 s of reading, about 25,000 transactions; with background, up to 200,000) |
| background | boolean | – | Run as a background job for up to 10 minutes, for more than 25 s of reading: answers at once with a job_id; get_job returns the result |
| limit | integer | – | latest transactions to scan |
No output schema declared.
No examples provided.
get_creator_activity ~78
On-chain activity of a token creator/dev wallet for that token: buys, sells, transfers, liquidity events. Returns: events[] of the creator wallet for this token: side (buy/sell/transfer/deposit/withdraw/burn...), amounts, XRP value, time, hash.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
get_crypto_market ~551
The crypto market as a whole, across all venues (centralized exchanges included): total market cap and 24h volume, BTC/ETH/XRP/USDT/USDC dominance, and XRP's global market cap, rank, volume and all-time high. With history (BTC, ETH, SOL, …): that asset's daily closes (Binance, USDT) and the correlation of its daily returns with XRP's. With token (an XRPL token): every market CoinGecko tracks for it outside xrpl.to (centralized exchanges and other DEXes), matched on the token's currency and issuer, each priced in USD against the token's XRPL DEX price: "SOLO on the DEX versus centralized exchanges". Returns: {totalMarketCapUsd, totalVolume24hUsd, marketCapChange24hPct, dominancePct, xrp {...}, at}; with history {asset, days, closes[] {date, close}, correlation {withXrp, dailyReturns, from, to}}; with token {token, xrplDex {priceXrp, priceUsd}, listed, coinId?, centralizedMarkets, unclassified?, markets[] {market, centralized (CoinGecko's flag on the exchange; null not known yet), pair, last, lastUsd, vsXrplDexPct, volume24hUsd, spreadPct, trust, stale, anomaly, lastTradedAt}}.
| Name | Type | Req | Description |
|---|---|---|---|
| coinbase_premium | boolean | – | Instead: XRP's price on Coinbase (USD, at Coinbase's own USDT-USD) against Binance (USDT): the Coinbase premium or discount, how US spot buyers price XRP |
| days | integer | – | With history: how many days |
| etf_flows | boolean | – | Instead: US spot XRP ETFs: daily net inflow, net assets and cumulative inflow (last 20 trading days), the last week's total, each fund's latest day, and an estimate of the XRP they hold |
| history | string | – | Daily price history of this asset instead, with its correlation to XRP |
| korea_premium | boolean | – | Instead: XRP's price on Upbit (KRW) against Binance (USDT), and the premium or discount in Korea ("kimchi premium") |
| token | string | – | An XRPL token (md5, slug or name): its markets on other venues, from CoinGecko, against its XRPL DEX price |
| xrpl_cex_ranking | boolean | – | Instead: XRPL-issued tokens ranked by how many centralized exchanges list them (every XRPL token CoinGecko tracks, its exchanges named; rebuilt daily) |
No output schema declared.
No examples provided.
get_escrows ~644
Escrows on the XRP Ledger, from xrpl.to's index of every Escrow object (kept current each ledger): totals (how many, how much XRP, how many owners) for the whole ledger or one account, and the escrows sorted by the next to unlock, the largest, or those that can be finished now. FinishAfter is the earliest an escrow can be finished; nothing moves until someone sends EscrowFinish (with the fulfillment, where the escrow has a condition), and once CancelAfter passes it can only be cancelled. sequence is what EscrowFinish and EscrowCancel take as OfferSequence (null where it could not be confirmed). Without an account it also ranks the owners holding the most (topOwners, with names). With within_days, what unlocks in the next N days per owner. With history_days, the XRP in escrow at each UTC midnight back through the record (today's total less what was created since, plus what ended since; with exclude_name, also without owners whose label contains it, e.g. Ripple): how escrowed XRP changed. The list shows `limit` at a time (page on with offset = list.nextOffset); totals and totals.xrpAmounts (smallest, largest, the most common amounts) always cover every escrow, so read the amounts there rather than from one page. Returns: {asOf {ledger}, totals {count, xrp, owners, withCondition, withCancelAfter {count, xrp} (only these can ever be cancelled), finishAfter {earliest, latest}, xrpAmounts {smallest, largest, mostCommon[] {xrp, escrows}}}, list {sort, matching, offset, returned, nextOffset?}, topOwners[] {owner, name?, escrows, xrp, nextFinish}, escrows[] {id, owner, ownerName?, destination, destinationName?, amount, currency, issuer?, mptIssuanceID?, finishAfter, cancelAfter, condition, sequence}}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | Optional r-address: its escrows |
| currency | string | – | XRP, a token currency code, or all |
| exclude_name | string | – | With within_days or history_days: leave out owners whose label contains this text (e.g. Ripple) |
| history_days | integer | – | Instead: XRP in escrow at each UTC midnight over the last N days, as far back as the record of escrow creations and ends goes |
| limit | integer | – | – |
| offset | integer | – | Skip this many of the sorted escrows: the next page of an account with more than limit (list.nextOffset says where it continues; totals always cover every escrow) |
| role | string | – | With account: escrows it funded (owner), is paid by (destination), or either |
| sort | string | – | next: the soonest FinishAfter still ahead; amount: largest XRP first; ready: can be finished now |
| within_days | integer | – | Instead: every escrow that unlocks (FinishAfter) in the next N days, totalled per owner, largest first |
No output schema declared.
No examples provided.
get_exit_liquidity ~118
Real exit-liquidity curve: how much XRP you actually receive selling several sizes of a token against live AMM+book, with price impact per size. Answers "can I get out at size". Returns: curve[] {xrpSize, tokensSold, xrpReceived, effectivePricePct, priceImpact}.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| xrp_sizes | array | – | XRP-value sell sizes to test (default 100, 1k, 10k, 50k) |
No output schema declared.
No examples provided.
get_fear_greed_index ~190
xrpl.to's Fear & Greed index for the XRP Ledger market (0 = extreme fear, 100 = extreme greed), recomputed every minute over listed XRPL tokens with stablecoins excluded. It is the XRPL market's own index, not the crypto-wide one. With days: its history instead, one reading a day taken when xrpl.to's daily report is built (late evening UTC; each reading carries its time), from 5 October 2026 on (nothing older was kept). Returns: {value, label (Extreme Fear | Fear | Neutral | Greed | Extreme Greed), bands, method (the five weighted inputs), updated}.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | History instead: one reading a day over this many days (oldest first); with history {days, from, readings[] {date, value, label, at}, bands, note} |
No output schema declared.
No examples provided.
get_frozen_lines ~236
Trust lines of a token that its ISSUER has frozen or deep-frozen right now, zero balances included (holder lists and gateway_balances leave those out), each with the transaction that switched the freeze on, found by walking the line's own history; plus the issuer's control flags (NoFreeze, GlobalFreeze, clawback, RequireAuth) and whether it can still sign at all: a blackholed issuer can never freeze, whatever its flags say. Answers "has this issuer ever frozen anyone": a line frozen now is proof. A freeze that was later lifted, and any clawback, leave nothing in ledger state: get_issuer_actions lists them as they happened, from the ledger its records start. Returns: {token, issuer, issuerFlags, frozen {count, deepFrozen, lines[] {holder, name (its label in the xrpl.to index, when known), balance, deepFrozen, frozenBy {hash, date, account, deepFreeze} | null, deepFrozenBy (when the deep freeze came later)}}, note}.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
get_funding_rates ~390
Perpetual futures positioning for XRP, BTC or ETH on OKX, Binance, Bybit, Hyperliquid, Bitget and Gate: each venue's funding rate for its own period (intervalHours; Hyperliquid pays every hour) and the same rate over 8 hours (fundingRate8h, the one to compare across venues; positive = longs pay shorts, longs crowded), the next funding time, open interest in coins and USD, and the total open interest across the venues; long/short ratios (all accounts on OKX, Binance, Bybit and Gate; top traders by accounts and by position size on OKX and Binance); and taker buy and sell volume over the last full hour on Binance and OKX. With days (1-30): instead the funding settled per UTC day on Binance, OKX, Bybit and Hyperliquid, and daily open interest on Binance, OKX and Bybit. Returns: {asset, venues[] {venue, instrument, fundingRate, intervalHours, fundingRate8h, nextFundingTime, openInterest, openInterestUsd, at}, openInterestTotal {openInterest, openInterestUsd, fundingRate8hWeighted (the 8-hour rates weighted by USD open interest), venues[]}, longShortRatios[] {venue, measure, longShortRatio, longShare?, shortShare?, period, at}, takerVolume[] {venue, hourStart, buyVolume, sellVolume, buySellRatio}}; with days {asset, days, from, funding[] {date, venues {venue: {sum, payments}}}, openInterest {venue: [{at, openInterest, openInterestUsd?}]}}.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| days | integer | – | History instead: funding per UTC day and daily open interest over this many days (today included, still open) |
No output schema declared.
No examples provided.
get_global_stats ~74
Platform-wide XRPL token market stats: totals, 24h volume, active tokens. Returns: platform totals: token count, 24h volume, active tokens, XRP price, fiat rates. Its transaction counts are DEX trades on tracked tokens, not every ledger transaction: for the whole network use get_network_activity.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_holder_clusters ~384
Are a token's top holders connected? Groups its top holders (up to 100, AMM pools left out) by shared activation ancestry, in one call: each holder's chain of activators is walked up to 4 wallets, stopping at service wallets (more than 100 activations: exchanges, launchpads), and holders whose chains meet at the same private wallet, or where one holder activated another, form a cluster. Per cluster: the holders, their combined share of supply, the shared wallets and how many hops up they sit, and the exchange each chain came out of. Also counts holders an exchange activated directly. Activation is an on-chain fact; a shared private funder is strong evidence of one operator, not proof. Direct transfers between wallets are a separate test (get_account_transactions counterparty). With all_holders, EVERY holder is also grouped by the account that created it (farms, sybil groups and scripted airdrops sit below the top 100). Returns: {token, analyzed, clusters[] {holders, supplyPct, ranks[], members[] {account, rank, holding, hops}, shared[] {account, name, holds, activated}, exchangeRoots[], includesCreator}, activatedByService {name: holders}, summary {inClusters, clusteredPct, independent}, wholeHolderBase? {holders, privateFunders[] {funder, holders, supplyPct, balanceSpread, medianBalance}, serviceFunders[]}}.
| Name | Type | Req | Description |
|---|---|---|---|
| all_holders | boolean | – | Also group EVERY holder by the account that created it (farms and sybil groups below the top 100; tokens up to 150,000 trust lines) |
| hops | integer | – | How far up each activation chain to walk |
| id | string | yes | Token md5 or slug |
| top | integer | – | How many top holders to analyse |
No output schema declared.
No examples provided.
get_holder_cohorts ~276
Exact holder counts by position size for a token, over EVERY holder (not a sample): dust worth up to 0.01 XRP (airdrop-sized), then up to 1, 10, 100 and 1,000 XRP, and above, valued at the current price. With profit true, also how many holders are in profit or at a loss on what they bought (the trader service's FIFO marks), hold only tokens they never bought, or never traded it. Returns: {priceXrp, holders, bands[] {label, upToXrp, upToTokens, holders}, profit? {inProfit, atLoss, even, heldWithoutPurchase, neverTraded, unrealizedXrp}}.
| Name | Type | Req | Description |
|---|---|---|---|
| above_tokens | number | – | Also count the holders with more than this many tokens (e.g. 10000 for RLUSD over $10,000) |
| bought_within_days | integer | – | Instead: every wallet that bought the token with XRP on the DEX in the last N days, its average buy price there against the price now: how many are under water on those buys |
| id | string | yes | Token md5 or slug |
| profit | boolean | – | Also count holders in profit, at a loss, and holding without a purchase on record |
No output schema declared.
No examples provided.
get_holder_graph ~62
Holder-count history of a token over a range (growth/decline trend): counts only, not which wallets. Returns: time series of holder counts over the range.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| range | string | – | – |
No output schema declared.
No examples provided.
get_holder_overlap ~209
Wallets that hold BOTH of two tokens (or, with collection_a and collection_b, two NFT collections; or a token and a collection: a with collection_b) right now, counted over every holder from xrpl.to's trust-line index (not a sample): how many, what share of each token's holders that is, and the largest shared holders with both balances. Returns: {a {name, holders}, b {name, holders}, both, shareOfA, shareOfB, top[] {account, balanceA, balanceB}}.
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | – | First token: md5 or slug (search_tokens finds them) |
| b | string | – | Second token: md5 or slug |
| collection_a | string | – | First NFT collection instead: slug, id or issuer:taxon |
| collection_b | string | – | Second NFT collection: slug, id or issuer:taxon |
| limit | integer | – | How many shared holders to list |
No output schema declared.
No examples provided.
get_holders ~191
Top holders of a token with balances and share of supply, each with the wallet that activated it; offset pages past the first rows. id XRP gives the XRP rich list (get_xrp_distribution with list true adds each account's last activity). Holders only: a line the issuer froze after it was emptied is not listed (get_frozen_lines lists every frozen line). Returns: richList[] with account, balance, holding % of supply, isAMM/isCreator/freeze flags, funder, plus summary top10/top20/top50/top100 %, gini, hhi. An MPT (id mpt-<issuance id>) lists the wallets holding its units (MPToken objects, balance scaled by AssetScale).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| limit | integer | – | – |
| offset | integer | – | Skip this many holders (rank order) |
No output schema declared.
No examples provided.
get_issuer_actions ~875
What issuers did to their tokens and holders, as it happened on the ledger: freezes and deep freezes (and lifting them), trust-line authorizations, clawbacks (from a holder, or from an AMM pool with AMMClawback), MPT locks and authorizations, and the account flags that grant or give up those powers (RequireAuth, NoFreeze, GlobalFreeze, AllowTrustLineClawback, AllowTrustLineLocking), and who can sign for the account at all: the master key disabled or enabled (with the regular key left to sign), a regular key set or removed, a signer list set or removed. With blackholed, the accounts that became unable to sign anything in the window (master key off, no usable regular key, no signer list, checked on the ledger now) with the tokens they issue: "which issuers blackholed this week" in one call. Read from each successful transaction's metadata, so a request that changed nothing records nothing, and a clawback's amount is what the holder actually lost (requested is what was asked). A trust-line action carries role: issuer, or holder when an account set the flag on its own side as the line's holder, which leaves the issuer's token untouched (only the issuer's bit freezes a holder). Filter by the account that acted (the issuer), the account it acted on, and the action; omit both accounts to search every issuer on the ledger, with topAccounts ranking who did it most. Records start at coverage.fromLedger; before it, a freeze still in place shows in get_frozen_lines and anything undone leaves no trace in ledger state. Returns: {coverage {fromLedger, fromTime}, counts {action: n}, topAccounts[] {account, name?, n}, actions[] {time, ledger, tx, type, action, role?, account, accountName?, counterparty, counterpartyName?, currency?, mptIssuanceID?, amount?, requested?, counterpartyBalance?, ammAccount?, clawed?, regularKey?, previousRegularKey?, masterDisabled?, quorum?, signers?}}; with blackholed: {since, coverage, keyChanges, checked, blackholed, issuingTokens, canStillSign, acc…
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | The account that acted (the issuer), r-address |
| action | string | – | Comma-separated: freeze, unfreeze, deep_freeze, deep_unfreeze, authorize, unauthorize, clawback, amm_clawback, require_auth_on, require_auth_off, no_freeze_on, no_freeze_off, global_freeze_on, global… |
| blackholed | boolean | – | Instead: accounts that became unable to sign anything since `since` (default the last 7 days), with the tokens they issue |
| holder | string | – | The account acted on (holder, or the AMM account), r-address |
| limit | integer | – | – |
| since | string | – | ISO date: only actions at or after it |
| supply | boolean | – | Instead, with account (the issuer): every rise in the supply it has outstanding, across its whole life, each with its ledger and transactions |
No output schema declared.
No examples provided.
get_job ~177
Read a background job: a tool started with background: true (run_script, get_account_transactions, get_payment_flows, get_cex_cashouts), which can run up to 10 minutes. Waits up to wait_s seconds for it to finish, then returns its status, and the tool's own result once it is done. Jobs are kept 1 hour and only the API key that started one can read it. Returns: {job_id, job_tool, job_status (working | completed | failed | cancelled), job_message, createdAt, lastUpdatedAt, next while working; once completed, the tool's own result fields beside these}.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The job_id the background call returned |
| wait_s | integer | – | Seconds to wait for the job to finish before answering (25 at most) |
No output schema declared.
No examples provided.
get_liquidations ~549
Recent real liquidations of XRP, BTC or ETH perpetual positions; with levels true, instead the ESTIMATED liquidation levels (a heatmap): where positions opened in the last 7 days on Binance, Bybit and OKX would be liquidated, in 1% price bands up to 25% either side, longs below the price and shorts above, from hourly open-interest changes and an assumed leverage mix (stated in the result), each band's USD and the running total from the price ("how much would liquidate if XRP fell 5%"). OKX: its latest filled liquidation orders (up to 100): how many longs and shorts were forced out, their size and USD value, the window they cover and the largest ones. Gate (gate): hourly totals by side over the last 24 hours and the last 7 days, each UTC day of the week, and the week's three heaviest hours, so "how much was liquidated yesterday" has an answer beyond the latest orders. Streams (streams): every liquidation Binance, Bybit and OKX streamed, collected by xrpl.to (since 5 October 2026): last 24 hours and 7 days by venue and side, each UTC day, the largest of the day, and whether each venue's collector is connected (Binance streams at most one liquidation per symbol per second, so its figures are a floor). A long liquidated is a forced sell, a short a forced buy. Returns: {asset, window {from, to, events}, longsLiquidated {count, size, usd}, shortsLiquidated {count, size, usd}, largest[], gate {last24h, last7d {from, to, hours, longsLiquidated {size, usd}, shortsLiquidated {size, usd}}, days[] {date, hours, longsLiquidated, shortsLiquidated}, largestHours[] {hourStart, longsLiquidated, shortsLiquidated}}, streams {collectingSince, venues {venue: {connected, last24h, last7d {longs, shorts {count, size, usd}}}}, days[], largest24h[]}}; a source that did not answer carries unavailable: true. With levels: {asset, estimate: true, price, window, venues[], openInterestShare, assumptions, longs {totalUsd, levels[] {fromPct, toPct, priceLow, priceHigh, usd, cumulativeUsd}, largest[…
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| levels | boolean | – | Instead: estimated liquidation levels by price (a model, labelled as an estimate), not liquidations that happened |
No output schema declared.
No examples provided.
get_lp_positions ~162
An account's AMM liquidity positions, read live from the validated ledger: every LP token it holds (an LP token is a trust line issued by an AMM account), each pool's reserves and LP supply, the account's share, what it would get back by withdrawing everything, and a value in XRP (a pool with XRP: twice its XRP side, the pool's own spot; a token/token pool: each side at its current xrpl.to price). One call instead of reading every LP line and pool by hand. Returns: {account, positions[] {amm, asset, asset2, lpTokens, share, amount, amount2, valueXrp, tradingFee}, totalValueXrp}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
get_macro_indicators ~203
Latest US macro readings from FRED: effective fed funds rate, 10-year Treasury yield, CPI inflation and M2 year over year, unemployment rate, initial jobless claims, broad dollar index — each with its date, previous reading and FRED link. With id: that one series over the last months instead (every observation, oldest first). Returns: {series[] {id, name, units, value, date, previous {value, date}, url}}; with id {id, name, units, url, months, from, observations[] {date, value}}.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | One series' history instead: DFF fed funds, DGS10 10-year yield, CPIAUCSL CPI year over year, UNRATE unemployment, ICSA jobless claims, DTWEXBGS dollar index, M2SL M2 year over year |
| months | integer | – | With id: how many months back |
No output schema declared.
No examples provided.
get_network_activity ~1,873
The whole XRP Ledger's activity over the last N hours, or a calendar window with since/until (every transaction, not only token trades), all exact: xrpl.to counts each ledger's transactions by type and result as it applies the ledger. Other views of the same network: by day (one transaction type per UTC day, e.g. payments each day of the last 30 days), accounts_by_day (accounts created per UTC day at any date), by app (transactions per wallet app by SourceTag), active_age (how old today's active accounts are), dex_traders_days (distinct DEX wallets over up to 30 days), daily (one row per daily report). Ledgers closed and their average close time, transactions by type with how many failed (a tec result: included in the ledger and charged its fee without doing what it asked), XRP destroyed by fees (the drop in total_coins), accounts created in the window, and accounts that sent a successful transaction (24h window). Returns: {window {hours, from, to, ledgerFrom, ledgerTo}, ledgers, avgCloseSeconds, xrpBurned, activeAccounts24h, newAccounts, deletedAccounts, topCreators[] {account, name, created}, transactions {total, perLedger, failed}, partialPayments {flagged, succeeded, deliveredLessThanAmount, ledgersCounted}, tickets {count, sharePct}, fees {medianDrops, p90Drops, p99Drops, maxDrops, meanDrops}, xrpPayments {count, withDestinationTag, destinationTagSharePct, deliveredXrp}, busiestLedgers[] {ledger, transactions}, types[] {type, count, sharePct, failed, failedPct}, hours[]? {start, ledgers, transactions, failed, partial?}}. Instead: top_senders (who paid the most fees or sent the most transactions), large_transfers (the largest single XRP transfers and the accounts that moved the most between each other), largest_trades (the largest DEX trades). failed_senders: the accounts that sent the most failed transactions, with the results they hit. exchange_flows: XRP into and out of each custodial service's labeled wallets over the window (exchanges, and the swap service…
| Name | Type | Req | Description |
|---|---|---|---|
| accounts_by_day | boolean | – | Instead: how many accounts were created per UTC day, at any date, with the total and the busiest day (since/until, default the last 30 days, at most 400 days at a time) |
| active_age | boolean | – | Instead: when the accounts that sent a successful transaction in the last 24 hours were created, by year, and how many in the last 30 days |
| by | string | – | hour: also break the window into clock hours (UTC): transactions, failed and ledgers per hour. day: instead, one row per UTC day (default the last 30 days, since/until for up to 400; counts start 202… |
| census | boolean | – | Instead: how many ledger objects of each type exist, from xrpl.to's mirrors and from a daily walk of the whole ledger (ledgerState: every object type incl. tickets, signer lists, NFT pages, DIDs, cre… |
| created_by | string | – | Instead: the accounts created in the last `hours` by this account, or by every wallet carrying this label in xrpl.to's index (e.g. Coinbase), and which of them have sent a transaction since (known fo… |
| cross_currency | boolean | – | Instead: the largest Payments of the last `hours` (up to 72) that delivered a different currency than they spent (converted through the DEX or an AMM on the way), with sender, recipient (or a swap to… |
| daily | integer | – | Instead: one row per day for the last N days from xrpl.to's daily network reports (DEX traders, trades and XRP volume, accounts activated, live and deleted accounts, new tokens, AMM liquidity), back… |
| dex_by_hour | integer | – | Instead: DEX trading volume (XRP) and fills by hour of the day (UTC), averaged over the last N days |
| dex_traders_days | integer | – | Instead: how many distinct wallets traded on the DEX (order book or AMM) over the last N days, counted once each |
| drains | boolean | – | Instead: wallet drains in the last `hours` (up to 720): payments out of victims' wallets to drainer accounts on xrpl.to's blocklist, recorded as they happened. How many, the XRP (and tokens) taken, f… |
| exchange_flows | boolean | – | Instead: XRP received and sent by every wallet under each custodial label (xrpl.to's labels; custodial = its wallets take tagged deposits from many customers, as exchanges do, and some swap services… |
| failed_senders | boolean | – | Instead: the accounts that sent the most failed (tec) transactions in the last `hours` (up to 744), each with how many and which results, e.g. tecPATH_DRY |
| hours | integer | – | Window ending at the latest ledger (xrpl.to's counts start 2026-10-02) |
| large_transfers | boolean | – | Instead: the largest single XRP transfers over the last `hours` (up to 2,160): payments, check cashes and account deletions that delivered 1,000 XRP or more, with sender, receiver and hash; and corri… |
| largest_trades | boolean | – | Instead: the largest DEX trades of the last `hours` (up to 72) by XRP value: every fill one transaction made across offers and AMM pools, summed on its XRP side, with the taker and the token |
| limit | integer | – | With by app: how many apps to list |
| most_transactions | boolean | – | Instead: the accounts that have sent the most transactions ever, from the highest Sequence numbers on the ledger (daily census) less each account's starting number, with when each was created |
| since | string | – | Start of a calendar window instead, ISO date or Unix ms (e.g. 2026-09-26T00:00:00Z for yesterday, with until). Also for token_payments, top_senders, failed_senders, exchange_flows, drains and large_t… |
| token_payments | string | – | Instead: a token's transfers in the last `hours` (up to 744): successful Payments and check cashes that sent the token itself to another account (not bought through the DEX), with the count, the amou… |
| top_senders | string | – | Instead: the accounts that paid the most in transaction fees, or sent the most transactions (failed ones included), over the last `hours` (up to 744) |
| type | string | – | With by day: the transaction type to count, e.g. Payment, OfferCreate, NFTokenAcceptOffer (default Payment) |
| until | string | – | End of the window, ISO date or Unix ms (default: the latest ledger); a ledger closing exactly at until belongs to the next window. Hourly views round it up to the whole hour |
No output schema declared.
No examples provided.
get_new_launches ~240
Most recently launched XRPL tokens, newest first. With by_origin, how many tokens each launchpad issued over a window. With creator true, what each token's creator received and what it sold, in total and within 24 hours of launch: the way to find launches whose creator dumped. Returns: tokens sorted by dateon desc with lightweight market fields; with creator, each token's creator {account, receivedTokens, soldTokens, soldPct, soldXrp, soldWithin24hTokens, soldWithin24hPct, firstSellMinutesAfterLaunch}.
| Name | Type | Req | Description |
|---|---|---|---|
| by_origin | boolean | – | Instead: how many tokens were first issued in a window, per launchpad (FirstLedger, xrp.fun, Horizon, xrpl.to, ...) and with no launchpad, each with how many are listed and still held |
| creator | boolean | – | Add each creator's allocation and sells |
| days | integer | – | With by_origin: the window, ending now |
| limit | integer | – | – |
| since | string | – | With by_origin: the window start instead, ISO date (e.g. the first of the month) |
No output schema declared.
No examples provided.
get_news ~212
XRPL/XRP news with sentiment, from xrpl.to's XRP-focused news feed (not a general crypto wire). Search it with query ("when was Bitget hacked?" → query "Bitget hack"), or list the latest, optionally from one source (the response lists the tracked sources) or one day. Returns: data[] with title, sourceName, sourceUrl, pubDate, sentiment, summary, newest first; sources[] when listing; with query, the words searched and pagination.total.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | YYYY-MM-DD: articles published that day |
| limit | integer | – | – |
| query | string | – | Keywords naming the event, company or token, e.g. "Bitget hack". Every story here is about XRP, so "xrp", "ripple" and "crypto" are dropped while a more specific word remains. Searches every source a… |
| source | string | – | One tracked source, e.g. CoinDesk |
No output schema declared.
No examples provided.
get_nft_activity ~759
An account's NFT trading history: buys, sells, mints, burns, transfers and offers, newest first, with prices in XRP and the counterparty. Without an account, the whole ledger over the last `hours`: how many events of the given types happened and which collections had the most (e.g. types MINT for "how many NFTs were minted today and by which collection", SALE for sales and XRP volume). Returns: {events[] {time, type, NFTokenID, collectionId, priceXrp, buyer, seller, broker, royaltyXrp, hash}, totals {bought, boughtXrp, sold, soldXrp}}; network-wide: {window {hours, from}, total, byType {type: n}, collections[] {collectionId, name, slug, events, xrp?}}; with order oldest: {first[] {time, ledger, type, NFTokenID, account, collectionId, hash}} (the NFT history index starts at the first mint after XLS-20 went live); with top: {sales[] {time, priceXrp, NFTokenID, collection, issuer, taxon, buyer, seller, broker, royaltyXrp, hash}}; with by broker: {brokers[] {broker, name, direct?, sales, volumeXrp, sharePct, feeXrp, feePct}}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | r-address (omit for the whole ledger) |
| all_time | boolean | – | With top and types SALE: rank every sale ever recorded instead of a window (the record sale). Sales paid in XRP; a sale paid in a token has no XRP price on record |
| by | string | – | Without an account: broker (types SALE) = sales, volume and fees per marketplace broker; day = the counts per UTC calendar day (whole days, today marked partial); collection (types SALE) = collection… |
| hours | integer | – | Without an account: the window, ending now |
| limit | integer | – | – |
| max_price_xrp | number | – | With by account: only offers (or sales) at or below this price in XRP; 0 = free offers |
| mint_flags | boolean | – | Instead: of the NFTs minted in the last `hours` (up to 2,160), how many are transferable, burnable by their issuer, XRP-only or mutable, and their transfer fees |
| order | string | – | Without an account: the first events of these types ever recorded instead of a window (e.g. the first NFT minted) |
| since | string | – | With top and types SALE: a calendar window instead of hours, any length (e.g. 2025-01-01 with until 2026-01-01 for the most expensive sales of 2025); ISO date or Unix ms |
| top | integer | – | Without an account, with types SALE: the N most expensive sales in the window (hours up to 720) |
| types | string | – | Comma-separated filter: SALE, MINT, BURN, TRANSFER, CREATE_BUY_OFFER, CANCEL_BUY_OFFER, CREATE_SELL_OFFER, CANCEL_SELL_OFFER, ACCEPT_OFFER (default: all) |
| until | string | – | With since: the end of the window, exclusive (default now) |
No output schema declared.
No examples provided.
get_nft_collection ~659
One NFT collection in one call (or, with rank and no id, collections ranked by floor, volume, owners or items, or by sales or volume over any date range, with sane filters): floor (with its 24h/7d/30d history, all-time high, and the floor day by day over the last 30 days), volume and sales over 24h/7d/30d/all time, items, owners, listings, top offer, and its largest holders with how many each holds (xrpl.to's ownership index, recomputed from the ledger). id is the collection slug or issuer:taxon; a bare issuer address gives everything that issuer minted: the ledger's own mint and burn counters for the account (every taxon) and each of its collections. Also the royalties its issuer has been paid, summed from every recorded sale. Returns: {collection, metrics {floor, floorATH, items, owners, listedCount, vol24h, vol7d, sales24h, …}, floorDaily[] {date, low, high, close}, issuerLedger {minted, burned}, royalties {xrp, salesPaying, sales, since}, owners {totalNFTs, totalOwners, topHolders[] {address, count, percentage}}}; for an issuer {issuer, minted, burned, inCirculation, authorizedMinter, holders, collections[] {slug, name, taxon, items, owners}}.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | With hold_times: the window of sales |
| hold_times | boolean | – | With id: instead, how long buyers held the collection's NFTs before reselling them over the last `days` (default 30): median and spread of the hold, how many flipped within an hour, a day or a week,… |
| holders | integer | – | How many top holders to list |
| id | string | – | Collection slug (fuzzybears), issuer:taxon (rw1R8cfHGMySmbj7gJ1HkiCqTY1xhLGYAs:1), or an issuer address for all its collections |
| limit | integer | – | With rank: how many collections |
| min_owners | integer | – | With rank: only collections with at least this many owners (a 1-item collection's floor is one person's asking price) |
| min_sales | integer | – | With rank floor: only collections with at least this many recorded sales |
| rank | string | – | Instead of id: collections ranked, e.g. floor for the highest floors (with how many items are listed at the floor); sales_range and volume_range by sales or XRP volume between since and until; bid_ov… |
| since | string | – | With rank sales_range or volume_range: start of the window, ISO date or Unix ms (default 30 days before until, at most 400 days) |
| until | string | – | With rank sales_range or volume_range: end of the window, ISO date or Unix ms (default now) |
No output schema declared.
No examples provided.
get_nft_offers ~158
NFT offers touching an account, and whether any is a phishing lure: offers it made, offers others made on its NFTs, and sell offers ADDRESSED to it (the airdrop-phishing shape — a free NFT whose name or link lures the owner to a drainer site). Each incoming offer carries the NFT's scam verdict and whether the sender is blocklisted. Returns: {offers[], incomingBuyOffers[], incomingSellOffers[] {offer, NFTokenID, name, collection, sender, amountXrp, senderBlocklisted, nftScam, nftScamType}, flagged (count of incoming offers that are scam-flagged or from a blocklisted sender)}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
get_offramp ~77
Trace how a wallet's XRP exits to exchanges INCLUDING one hop downstream (funds → intermediary → exchange), which direct cex-cashout detection misses. Returns: direct[] and viaIntermediary[] {intermediary, exchange, xrp}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| limit | integer | – | – |
No output schema declared.
No examples provided.
get_ohlc ~450
OHLC candles for a token, or its price at a past moment. Quoted in XRP by default (the literal XRP in USD). vs_currency USD converts each candle at the XRP/USD rate of its own time; EUR/JPY/CNH then convert it at the ECB reference rate of its own day (the ECB publishes CNY, used for CNH; fx_basis says so). With `at` (a date/time) it returns the one candle containing that moment, at the finest resolution that reaches it (5-minute up to ~17 days back, hourly up to ~208 days, daily beyond), plus the previous close: the way to answer "what was X worth on <date>". Candles are gapless (each open is the previous close); a candle with volume 0 had no trade and carries the last traded price forward. XRP/USD is Binance XRP/USDT and starts 2018-05-04; nothing before a series starts is invented. With extremes true it reads the whole daily series once and returns the all-time high and low in XRP and in USD, each with its date: the way to answer "what was X's all-time high". Returns: ohlc [time, open, high, low, close, volume] (series), or {at, candle {start, end, open, high, low, close, volume, traded}, previousClose, resolution, vs_currency} (at), or {since, xrp {high {price, date, dayVolumeXrp}, highestClose, low, lowestClose, now, fromHighPct, fromHighestClosePct}, usd {…}} (extremes).
| Name | Type | Req | Description |
|---|---|---|---|
| at | string | – | A past moment (ISO date/time, or Unix ms): returns the candle containing it instead of a series |
| count | integer | – | – |
| extremes | boolean | – | All-time high and low over the whole daily series, in XRP and USD, with dates |
| id | string | yes | Token md5 or slug, or XRP |
| resolution | string | – | – |
| vs_currency | string | – | Quote currency (default XRP; USD for the literal XRP) |
No output schema declared.
No examples provided.
get_oracle_prices ~221
Prices written ON the XRP Ledger by price oracles (XLS-47 Oracle objects), read from the validated ledger: each publisher's price with its last update time and age, and the ledger's own aggregate (median, mean, standard deviation, from rippled get_aggregate_price). Reads every publisher on the ledger that carries the pair (xrpl.to records each Oracle object as it is set), or the oracles you pass. XRP/USD unless base/quote say otherwise; the publishers also carry BTC, ETH, RLUSD, USDC, USDT and more against USD (each publisher lists its pairs). Returns: {base, quote, publishers[] {provider, account, documentId, price, updated, ageSeconds, pairs[]}, aggregate {median, mean, standardDeviation, size, time}}.
| Name | Type | Req | Description |
|---|---|---|---|
| base | string | – | Base asset code, e.g. XRP, BTC, RLUSD |
| oracles | array | – | Optional: other Oracle objects to read instead of the defaults |
| quote | string | – | – |
No output schema declared.
No examples provided.
How do I install the XRPL.to Token Analytics MCP server?
XRPL.to Token Analytics is a hosted endpoint at https://api.xrpl.to/v1/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.xrpl.to
claude mcp add --transport http xrplto-xrpl-to 'https://api.xrpl.to/v1/mcp'
What is the XRPL.to Token Analytics MCP server?
XRPL.to Token Analytics is an MCP server listed in the public MCP registry as io.github.xrplto/xrpl-to. XRP Ledger tokens, AMM pools, NFTs, accounts and transactions: prices, holders, trades and history. This page covers its hosted endpoint (https://api.xrpl.to/v1/mcp).
Is the XRPL.to Token Analytics MCP server safe to use?
XRPL.to Token Analytics scores 70 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the XRPL.to Token Analytics MCP server expose?
XRPL.to Token Analytics exposes 89 tools: search_tokens, get_token, get_trending_tokens, get_new_launches, get_trades, and 84 more. Their descriptions and schemas cost roughly 24,842 tokens of context every time the server is loaded.
Does the XRPL.to Token Analytics MCP server require authentication?
No. We connected to XRPL.to Token Analytics without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the XRPL.to Token Analytics MCP server still maintained?
XRPL.to Token Analytics is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.