Subscriptions

Subscriptions

Buy a plan or a credit pack with XRP or a card.

Manage your plan

Plans

Plan30 days1 yearCredits per 30 daysRequests/secTransactions/sec
FreeFree1M101
Developer$49$49010M505
Business$499$4990100M20050
Professional$999$9990200M500100
PartnerBy invitation, free20M10010

A plan is a 30-day or 1-year term and never renews by itself. Buying the same plan again before it ends adds another term; switching plans, or buying after it ends, starts a new term that day. When a term ends, your keys drop to Free. A plan’s credits reset every 30 days, and unused ones do not carry over. A year costs the same as 10 months. The Partner tier is free for integrations that credit xrpl.to — apply from the dashboard.

Rate limits

Four independent layers apply to every request; the strictest one wins. All 429 responses carry Retry-After plus X-RateLimit-Limit/-Remaining/-Reset headers and a JSON body with retryAfter.

LimitRule
No key2 req/sec burst, 30 req/min, 333/day (no key) + 0.25x endpoint windows
Per IPAll clients: 100 requests per 2s per IP (DDoS backstop). 429 with Retry-After: 2.
Per secondSustained rate enforced over a 10s window, plus a hard 1-second burst cap. Anonymous: 2/sec burst, 30/min sustained, per IP. Free: 10/sec sustained with 20/sec bursts (shared per IP across keys). Keyed tiers per key — developer 50/sec (burst 100), partner 100/sec (burst 200), business 200/sec (burst 300), professional 500/sec (burst 750).
Per minuteAnonymous and free: 30 req/min and 600 req/min per IP respectively.
Per endpointExpensive endpoints have their own request windows, matched by path prefix (so /tokens and /tokens/slugs share one bucket). Base limits are per 60s and scale by tier multiplier: anonymous 0.25x, free 1x, developer 3x, partner 5x, business 10x, professional 15x, enterprise uncapped. Examples at anonymous tier: /tokens 5/min, /search 7/min, /amm 7/min, /account/tx 5/min. Some endpoints pin per-tier caps directly instead of the multiplier (unpinned tiers use the standard multiplier): /dex/quote 1/min anonymous, 3/min free, 45/min partner (10 credits/call); /mentions/x-search 1/min anonymous, 2/min free (10 credits/call); /web-search 1/min anonymous, 3/min free; /tx-explain 3/min free; /account-tx-explain 2/min free. The 429 body names the endpoint bucket and its window.
Per dayAnonymous: 333 requests/day per IP. Free: 33K/day per IP. Keyed tiers per key: developer 400K/day, partner 1M/day, business 4M/day, professional 8M/day. Successful responses include X-RateLimit-Daily-Remaining where a daily cap applies.
HeadersSuccessful responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the window resets). For anonymous clients these reflect the per-minute window; for keyed clients the per-second window. Credit-metered keys also get X-Credits-Used / X-Credits-Remaining.
CreditsEach endpoint has a credit cost (0-10 credits per call). Check /keys/costs for details. WebSocket messages cost 0.1 credits each. Scam-blocklist reads (/scams/*, /nft/scam) are never rate-limited or capped.

Credit packs

PackPriceCredits
Starter Pack$51M
Standard Pack$205M
Bulk Pack$7525M
Mega Pack$250100M

One-time top-ups, added when the payment confirms. Unlike a plan’s credits, they are not reset every 30 days.

Pay with XRP

XRP payment
import { Client, Wallet, xrpToDrops } from 'xrpl';

const wallet = Wallet.fromSeed(seed, { algorithm: seed.startsWith('sEd') ? 'ed25519' : 'ecdsa-secp256k1' });

// 1. Ask for a payment request (valid 30 minutes)
const { payment } = await fetch('https://api.xrpl.to/v1/keys/purchase', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ wallet: wallet.address, type: 'tier', tier: 'developer', billing: 'monthly' })
  // tier: developer | business | professional, billing: monthly | yearly
  // or a credit pack: { wallet, type: 'credits', package: 'starter' }  (starter | standard | bulk | mega)
}).then((r) => r.json());

// 2. Send exactly that XRP, with the destination tag (submitAndWait fills in sequence and fee, then signs)
const client = new Client('wss://xrplcluster.com');
await client.connect();
const tx = await client.submitAndWait({
  TransactionType: 'Payment',
  Account: wallet.address,
  Destination: payment.destination,
  DestinationTag: payment.destinationTag,
  Amount: xrpToDrops(payment.amount)
}, { wallet });

// 3. Apply it
await fetch('https://api.xrpl.to/v1/keys/verify-payment', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ txHash: tx.result.hash })
});

Pay by card

Stripe checkout
// 1. Create a checkout session and send the user to it
const { checkoutUrl, sessionId } = await fetch('https://api.xrpl.to/v1/keys/stripe/checkout', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ wallet: 'rYourWallet…', type: 'tier', tier: 'developer', billing: 'yearly' })
}).then((r) => r.json());
window.location.href = checkoutUrl;

// 2. After the redirect back, check the session
const status = await fetch(
  `https://api.xrpl.to/v1/keys/stripe/status/${sessionId}?wallet=rYourWallet…`
).then((r) => r.json());

Billing endpoints