/v1/testnet/fixtures
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
Request
https://api.xrpl.to/v1/testnet/fixturescurl 'https://api.xrpl.to/v1/testnet/fixtures'
Response
https://api.xrpl.to/v1/testnet/fixtures{ "success": true, "network_id": 1, "generated_at": "2026-10-12T00:59:16Z", "age_seconds": 320, "population": 20642, "last_activity": [ "trader:572 set its domain (tesSUCCESS)", "trader:325 paid 49.85 XRP (tesSUCCESS)", "trader:368 paid 26.08 XRP (tesSUCCESS)", "trader:46 paid 9.88 XRP (tesSUCCESS)", "trader:276 deposited 28.93 XRP at the exchange (tag 1028020) (tesSUCCESS)" ], "accounts": { "issuer": "rLgZXamWAfiuShiArGu1ZphyjymKX1QKs1", "holders": [ "r2tYcnk8hL8kx6MAzumrTxBFHqMk7h3Za", "rfnxjxn174miNCuwbrkmLa1h8ATFvxfCb2", "rwWL3dn9uozLqNpEbhA4K76H6PMwpcYBe3", "rPyq2Mch8tXRDwNJrey3tbx3MTJSd6e1X3", "rwrrueqLLpfAVc97aC6UTDwZ5noc9GCAzw" ], "trader": "rh7BTtaMxPfbbP8fmgdH5zrDspoNvgZhcz", "population": 20642, "busy": [ "rLgZXamWAfiuShiArGu1ZphyjymKX1QKs1", "rh7BTtaMxPfbbP8fmgdH5zrDspoNvgZhcz", "rM7ATsj4kqoqNeEY68Z5rFoc2JuytC1H5D", "r2tYcnk8hL8kx6MAzumrTxBFHqMk7h3Za", "rJKHxqbLGYi1jmmPp68FadaGhkJJ6CJUM" ] }, "tokens": [ { "name": "Testnet RLUSD", "currency": "524C555344000000000000000000000000000000", "issuer": "rLgZXamWAfiuShiArGu1ZphyjymKX1QKs1", "holders": 597, "amm": "rPZ4iweTw9ficJh4eRKFPSUPnZE7RZnykT", "book": true, "peg_usd": 1, "role": "stablecoin", "note": "Pegged to one dollar in XRP; its issuer stands in the market with a ladder either side of the peg and defends the pool. Also pooled against the deep and the volatile token, with no XRP in those pools." }, { "name": "Testnet Deep Pool", "currency": "4445455000000000000000000000000000000000", "issuer": "rEZDNzhzWpVoAS8Tb8ftzp2jipj5s2douH", "holders": 588, "amm": "r3rWtUcwAMUvW8L6NvdgE2J4fX3n5Ka6Qn", "book": true, "role": "deep", "note": "The high-liquidity pool: kept at thousands of XRP by the funder, a third of the bots trade it, and it gains holders every hour — the token every example points at." }, { "name": "Testnet Volatile Pool", "currency": "564F4C5400000000000000000000000000000000", "issuer": "rNmqLvw9pFuDBBD3D15D9Ttd28q3f5P5Pv", "holders": 590, "amm": "rBEYigdZqzjN4u3brwbfSFKopBDVsvpkG1", "book": true, "role": "volatile", "note": "A thin pool that a whipsaw account swings by a tenth to a quarter every round, so its price moves the way a small token's does." }, { "name": "Testnet Transfer Fee", "currency": "4645450000000000000000000000000000000000", "issuer": "rBC6uXMVDPbWooecrt8KpX4UG1xVQHXRjC", "holders": 586, "amm": "rE7v4y64DoHuwg3o3aCjuLYykTJWmHTWXJ", "book": true, "role": "fee", "note": "A 2% transfer fee (TransferRate 1020000000): a payment between holders delivers less than it sends, and SendMax matters." }, { "name": "Testnet Auth Only", "currency": "4155544800000000000000000000000000000000", "issuer": "rJzt9K4obfhXRk9jY74oVk5uT65xaB2JiL", "holders": 597, "amm": null, "book": true, "role": "auth", "note": "RequireAuth: a trust line to it is worthless until the issuer authorises it, and a payment to an unauthorised line is tecPATH_DRY. No pool." } ], "collections": [ { "name": "Testnet Blue Chips", "issuer": "rK2dNJDJBGPvshUSNe2gjeg6rDGcPCkGgD", "taxon": 6085, "role": "blue-chip", "note": "The collection people trade: it grows a few pieces a run to fifty, and its pieces are listed, bid on and sold every round.", "items": 51 }, { "name": "Testnet Soulbound", "issuer": "rKooSG8rCXip1eBDDuKS77FfePs5Y2ztR9", "taxon": 4912, "role": "soulbound", "note": "Minted without tfTransferable: a piece can be burned but never sold or transferred, and an offer on it is refused.", "items": 3 }, { "name": "Testnet Royalty", "issuer": "rDaSMQZ1CJ5x6ZgsX1iFSLymovFkMzWcae", "taxon": 901, "role": "royalty", "note": "Minted with a 5% TransferFee: every sale pays the issuer, and only XRP offers are allowed on it.", "items": 3 }, { "name": "Testnet Drop 1", "issuer": "rUcJbY2my49KpsYt4W3QCUQdDTR91SNBnx", "taxon": 4835, "role": "drop", "note": "A small drop: a few pieces minted at once, with sell and buy offers standing.", "items": 4 }, { "name": "Testnet Drop 2", "issuer": "rNMpr9fMjhNZTME8BKHvjghAbm5rkVnjWm", "taxon": 3410, "role": "drop", "note": "A small drop: a few pieces minted at once, with sell and buy offers standing.", "items": 4 } ], "nft": { "id": "00080000CBCE3BC706D5D9384500837C286BE4AD8B208643052655EC01424A8E", "issuer": "rK2dNJDJBGPvshUSNe2gjeg6rDGcPCkGgD", "owner": "rhw3p93iJymY8UGYCZLHeGAnr6uoHenZhe", "taxon": 6085, "sell_offer": "FDB29E3AB421633FB916DA873341DE1571F75E2C7B6C7F3C76A2ADECB32925EA", "buy_offer": "0537532779AE1D8531BFCA08692C1BB59CCC661DD906D37D05CF318D49926E5F" }, "objects": { "check": { "id": "C51662D0308191CA3B854556288C0046849F887D67685134E069F2A8B1C71473" }, "credential": { "subject": "r4dzKVB9GAkKzPHRh9ZDxPPGEovkRrpie", "issuer": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "credential_type": "4B5943" }, "deposit_preauth": { "owner": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "authorized": "r4dzKVB9GAkKzPHRh9ZDxPPGEovkRrpie" }, "did": { "account": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL" }, "escrow": { "owner": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "seq": 21121923 }, "mpt_issuance": { "id": "01424B8D0430A7DDD769FB7BF98214A67F4AC2145F37E951", "holder": "r4dzKVB9GAkKzPHRh9ZDxPPGEovkRrpie" }, "nft_offer": { "id": "5A6CA39C2ABF89A84D6C31CF43C4C3656AA4583F2CAA71965754889C3842270C" }, "nft_page": { "id": "0430A7DDD769FB7BF98214A67F4AC2145F37E951FFFFFFFFFFFFFFFFFFFFFFFF" }, "offer": { "account": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "seq": 21121939 }, "oracle": { "account": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "oracle_document_id": 1 }, "payment_channel": { "id": "5E7EBB7C1CE9046642DDCFA607D21FD67758C3414B80A7CF8562D4477CC87AF9" }, "permissioned_domain": { "account": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "seq": 21121929 }, "signer_list": { "id": "15EDD1F124E575FA27B50BBCEDE3A0A25A10A54AAE47C1FFFB1A52EB8FF0D916" }, "ticket": { "account": "rP9zRkwYEF1Y5KhtUmy9Ehq2D5sSe3zvL", "ticket_seq": 21121925 }, "transaction": { "hash": "A9804E83444953CFC3806F2F76D804B678B68C25B868374D013A37781B3CB314", "ledger_index": 21465653 } }, "catalogue": [ { "id": "account.delete", "kind": "AccountDelete", "about": "deleting an account and sending what is left to another", "result": "faucet: XRPLClientError(XRPLJsonRpcError(ReqwestError(reqwest::Error { kind: Request, url: \"https://faucet.altnet.ripple", "at": "2026-10-12T00:29:00.164245033+00:00", "tx": { "TransactionType": "AccountDelete", "Account": "rPaD5GNSuR1qsA1JrK991CuzUA11rkiumh", "Destination": "rncM1NzZZx1e1rdUXjiMcQKmLGhpCCZSzN", "DestinationTag": 8039 } }, { "id": "accountset.defaultripple", "kind": "AccountSet", "about": "asfDefaultRipple: an issuer letting its token move between holders", "result": "tesSUCCESS", "at": "2026-10-11T02:20:36.036513724+00:00", "hash": "4AC955B6A258DBD18245A255D88CC1F47AED76296C7649A1F20B57FE4022D6BA", "tx": { "TransactionType": "AccountSet", "Account": "rKq9h6qCp9mGsQ7QwwE2uovypAfzf3d1cj", "SetFlag": 8 } }, { "id": "accountset.depositauth", "kind": "AccountSet", "about": "asfDepositAuth: nothing arrives unless this account allowed it", "result": "tesSUCCESS", "at": "2026-10-11T03:24:59.140411732+00:00", "hash": "5925B58DC18B876F1923EAA0AC17BD04CC6BA3BD121B9323DE8A7BD974AC4505", "tx": { "TransactionType": "AccountSet", "Account": "rwKxu3GRimzo2tAc4q6yMpqSjDKMabMxk1", "SetFlag": 9 } }, { "id": "accountset.disallowxrp", "kind": "AccountSet", "about": "asfDisallowXRP: the advisory flag that says do not send XRP here", "result": "tesSUCCESS", "at": "2026-10-11T03:24:52.093614526+00:00", "hash": "6676E0C8F00D8282E6DF7BF0D1459849293C6F3BE3CE155999D75A20B49AB0AC", "tx": { "TransactionType": "AccountSet", "Account": "rBUdeB7m11ZmyVeuMRjs7bvToxCTWWYwys", "SetFlag": 3 } }, { "id": "accountset.domain", "kind": "AccountSet", "about": "setting the Domain field, which is how an account claims a website", "result": "tesSUCCESS", "at": "2026-10-11T02:20:29.128316304+00:00", "hash": "5B0F684D6ED190E336B8A2EA558256B4090984C64C6828067F693BC317A9D398", "tx": { "TransactionType": "AccountSet", "Account": "rNWAixy2H933XhuqdfvyyVt5mEJnDb2T5n", "Domain": "7472616465722d36302e6578616d706c65" } } ] }
Long arrays and strings are shortened in the example; Send request for the full answer.
{ network_id, generated_at, age_seconds, population, accounts: { issuer, holders[], trader, busy[] }, tokens[], nft, objects, catalogue[] }
What it does
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
- Notes
- Rebuilt every few minutes by the simulation; age_seconds past a few minutes means Testnet was reset and it is catching up.