Token Launch
Create a token, its issuer and its AMM pool in one call. xrpl.to runs every ledger step and then locks the issuer for good, so the supply can never change.
Costs
| Cost | Amount | What it is |
|---|---|---|
| AMM liquidity | You choose, min 1 XRP | XRP paired with your token in its AMM pool. |
| Platform fee | 2 XRP (0% dev)5 XRP (1-30%)10 XRP (31-60%)15 XRP (61-90%) | Set by the share of supply you allocate to yourself and bundles. |
| Reserves and network fees | 2.8 XRP | XRP Ledger reserves for the new accounts, plus transaction fees. |
| Anti-snipe | Free | The shield is on by default: nobody can buy in the ledger that opens the pool, and trading starts about 4 seconds later. Full anti-snipe mode instead holds a 3-minute window in which new trust lines need approval. |
| Bundles | 6 XRP + 1 XRP per wallet | Optional. Sends tokens to up to 10 extra wallets at launch; each also locks a 0.2 XRP reserve. |
| Promotion pool | 3% of supply by default | No XRP cost. Paid out to people who post about your token; set 0–10%. |
Minimum total: 6 XRP
With 1 XRP of liquidity and nothing allocated. Quote an exact setup with GET /v1/launch-token/calculate-funding and send exactly that amount: XRP left over after the launch goes to xrpl.to, not back to you.Request body
| Field | Rule |
|---|---|
| currencyCode | Required. 3–20 letters and numbers, or a 40-character hex code. Not "XRP". |
| tokenSupply | Required. A whole number from 1,000 to 9,007,199,254,740,991. |
| ammXrpAmount | Required. XRP for the AMM pool, 1 to 100 billion. |
| name | Required. Up to 100 characters. |
| origin | Required. Your platform, e.g. "xrpl.to". |
| user | Required. Creator or team name. |
| userAddress | Your wallet. Required with userCheckAmount or vesting. |
| userCheckAmount | Tokens for you, sent as a Check to cash. At most 90% of supply, and the AMM pool always keeps 5% after the promotion pool, vesting and bundles; a larger amount is lowered to fit. With bundles, you and the bundles together must stay within 90% minus the promotion pool and vesting, or the request is refused. |
| shield | On by default: nobody can buy in the ledger that opens the pool, and trading starts about 4 seconds later. Send false to turn it off. |
| antiSnipe | Full anti-snipe mode: for 3 minutes after the pool opens, new trust lines need approval (POST /v1/launch-token/authorize). Not with vesting. |
| vesting | Locks a further 1–90% of supply for userAddress in token escrows, released over at most 2 years. Either { percent, trancheCount (1–12), intervalDays } or { percent, tranches: [{ percent, delayDays }] } with tranche percents adding up to 100. Not with antiSnipe. |
| bundleRecipients | Up to 10 wallets as [{ address, percent }], 0.01–50% each, no address twice. Each gets a Check to cash. |
| platformRetentionPercent | Promotion pool, 0–10% of supply (default 3%). |
| ammTradingFee | AMM fee, 0–1000 (0–1%). Default 500 (0.5%). |
| domain | Letters, numbers, dots and hyphens, up to 128 characters. Default xrpl.to. |
| description | Up to 1000 characters. |
| telegram, twitter | Handles or links. |
| imageData | Base64 PNG, JPEG, GIF or WebP, up to about 500 KB. A larger or invalid image is left out and the launch goes ahead without it. |
Status flow
initializingThe launch session is created.awaiting_fundingSend the quoted XRP to the issuer address. You have 10 minutes.partial_fundingonly if you send too littleSome XRP has arrived; send the rest before the 10 minutes are up.fundedThe payment has arrived.configuring_issuerThe issuer account gets its domain and, with the shield, requires authorisation.registering_tokenThe token is registered on xrpl.to.creating_trustlineThe holder wallet trusts the new token.sending_tokensThe whole supply is issued to the holder wallet.creating_checksonly with userCheckAmountYour allocation is sent as a Check for you to cash.creating_bundle_checksonly with bundleRecipientsA Check for each bundle wallet.creating_vesting_escrowsonly with vestingThe vesting escrows are created.creating_ammThe AMM pool opens and trading starts.scheduling_blackholeThe issuer is locked for good, so the supply can never change.successDone.
A launch can also end or pause in
funding_timeout— The XRP did not arrive within 10 minutes.failed— Any other error; the status carries it.resuming— The server restarted mid-launch and is picking it up again.
Endpoints
- POST
/v1/launch-tokenCreate new token with AMM - GET
/v1/launch-token/status/{sessionId}Launch session status - GET
/v1/launch-token/queue-status/{sessionId}Queue position status - POST
/v1/launch-token/authorizeAuthorize trustline (anti-snipe) - GET
/v1/launch-token/auth-info/{issuer}/{currency}Token authorization info - GET
/v1/launch-token/check-auth/{issuer}/{currency}/{address}Check if address is authorized - GET
/v1/launch-token/calculate-fundingCalculate required XRP funding (400 on invalid params) - GET
/v1/launch-token/my-launchesyour own API key (the shared browser key gets 403)Launches created with your API key, with total count (a wallet lists its own with /launch-token/my-launches-wallet) - POST
/v1/launch-token/{sessionId}/imageUpload token image (base64, max 500KB) - GET
/v1/launch-token/my-launches-walletwallet signatureToken launches by wallet with total count - GET
/v1/launch-token/vesting-by-token/{issuer}/{currency}Vesting schedule for a launched token (response includes truncated flag when escrow list is incomplete) - GET
/v1/presaleList presales (open by default) - POST
/v1/presaleCreate a presale (issuer + sale wallets are provisioned server-side) - POST
/v1/presale/{id}/joinJoin — checks the wallet can fund the escrow above its reserve, returns the conditional EscrowCreate to sign; an unconfirmed slot may join again, an escrow that already landed is confirmed instead - POST
/v1/presale/{id}/confirmConfirm a signed escrow contribution - POST
/v1/presale/{id}/finalizeFinalize after deadline/goal: capture escrows, deliver claim Checks, seed AMM, blackhole wallets - GET
/v1/presale/{id}Presale status (public view: raise, socials, confirmed contributors, vesting; refreshes claim states on success) - GET
/v1/presale/{id}/claim-infoPer-buyer claim (CheckCash) or refund (EscrowCancel) transaction to sign - GET
/v1/presale/{id}/refund-infoAlias of claim-info
Partner revenue
A launch made with a Partner or Enterprise API key earns that key's wallet 50% of its launch fee (platform fee plus bundle fee), paid automatically in XRP once the total reaches 1 XRP. It replaces the launcher's referral share, so each launch pays one share. Apply for Partner from the Keys section of your dashboard; Enterprise is by invitation.