Skip to main content

PONS Create Token API: Launch a Robinhood Chain Token in One POST

Launch a token on ponsfamily.com's bonding curve on Robinhood Chain from code, with full wallet custody. One request returns an unsigned launch transaction — name, symbol, image, socials, the dev buy priced from the fresh curve, the snipe-tax exempt list, the gas — and you sign and send it yourself.

Prefer one call, no keys on your side?

PONS Lightning Create signs and sends for you — same body without publicKey, 1% commission on the dev buy.

API Endpoints​

EndpointDescription
POST https://rhc.pumpdev.io/api/create-localLaunch a PONS token (optional dev buy) — unsigned transaction back, you sign
POST https://rhc.pumpdev.io/api/create-lightningThe same launch, signed and sent by PumpDev — see Lightning Create

No API key. No signup. No custody. The commission is 0.5% of the dev buy, taken inside the launch transaction by PumpDev's launch router — an immutable contract with no owner and no setter, which forwards the launch to PONS and never holds your funds. A launch with no dev buy costs nothing beyond PONS's own launch fee.


How a PONS launch works​

  1. You POST the token details (and publicKey) — the launch is encoded, the dev buy is priced from the fresh curve, gas is estimated, and the token address is predicted with an eth_call of the very same transaction.
  2. You get back one EVM transaction: sign it with ethers/viem and send it to any Robinhood Chain RPC or straight to the sequencer.
  3. The transaction goes through PumpDev's launch router into the PONS launcher. The token, its bonding curve and your dev-buy tokens all land in one block.

Compare with Lightning Create if you would rather not sign at all.

Key facts​

  • The token goes live on a bonding curve paired with ETH. Every curve opens at the same state, so the dev buy is priced exactly, before the token exists.
  • PONS charges a launch fee (0.0005 ETH at the time of writing, read live from the factory). It is paid in the same transaction and shown in the response as launchFee.
  • The dev buy is optional, with no minimum. buyAmount in ETH is bought on the fresh curve at launch, in the launch transaction, and lands in your wallet; 0 launches without a buy. The chain sets no floor on a buy — any positive amount of wei trades — so the practical minimum is gas.
  • Metadata limits are the chain's, in UTF-8 bytes (an emoji is 4): name 64, symbol 16, image URL 512, description 2048, each social link 256. Longer strings revert on chain, so the API refuses them with a 400 first.
  • The creator is exempt from the snipe tax. Every PONS curve taxes buys up to 99% in the first 3 seconds (see The snipe tax); the creator's dev buy and any wallet in snipeTaxExempt pay 0%. That list is how PONS does bundle launches — up to 30 wallets, fixed at creation.
  • The creator earns a tax of their own on every buy of the curve if creatorTaxBps is set (0–1000, i.e. up to 10%).

Request Parameters​

ParameterTypeRequiredDescription
publicKeystringYesYour wallet address — the creator, the recipient of the dev buy, and from
namestringYesToken name, 64 bytes or less
symbolstringYesTicker, 16 bytes or less
imagestringYesImage URL (https://… or ipfs://…), 512 bytes or less. Stored in the launch itself — there is no metadata JSON on PONS
descriptionstringNoUp to 2048 bytes. Default: Launched on pumpdev.io — the fastest PONS API
twitter, telegram, websitestringNoSocial links, 256 bytes each
buyAmountnumberNoDev buy in ETH, default 0. buyAmountSol / buyAmountQuote are accepted as aliases
creatorTaxBpsnumberNoYour tax on every buy of the curve, in basis points, 0–1000 (default 0)
slippagenumberNoSlippage percentage on the dev buy (default: 90). The curve is untouched when your buy lands, so the quote is exact
snipeTaxExemptstring[]NoUp to 30 wallet addresses that buy the first seconds tax-free. You are always exempt
priorityFeenumberNoPriority fee in gwei per gas (default: 0.05). Refused above 100
gasLimitstringNoSkips gas estimation. A launch costs ~3.7–4.2M gas
noncenumberNoSkips the nonce lookup; pass it when firing several transactions in a row
pairTokenstringNoOnly the zero address (ETH) is accepted for now; USDG and tokenized-equity pairs are refused with 400

Response​

{
"transaction": {
"chainId": 4663,
"type": 2,
"from": "0xYourWallet",
"to": "0xLaunchRouter",
"data": "0x9fbbeb66…",
"value": "10500000000000000",
"gasLimit": "4573000",
"maxFeePerGas": "450000000",
"maxPriorityFeePerGas": "50000000",
"nonce": 12
},
"token": "0xNewToken",
"curve": "0xItsBondingCurve",
"salt": "0x…",
"publicKey": "0xYourWallet",
"launchFee": "500000000000000",
"fee": { "bps": 50, "amount": "50000000000000", "asset": "ETH" },
"quote": {
"amountIn": "9950000000000000",
"expectedOut": "5862…",
"amountOutMin": "586…",
"quoteAsset": { "symbol": "ETH", "decimals": 18 }
}
}
  • transaction.value is launchFee + buyAmount — PONS's fee plus your gross dev buy — in wei. fee.amount is the part of the buy that is PumpDev's commission; quote.amountIn is what actually buys tokens.
  • token and curve are known before you send: the address is deterministic from the salt, the name, the symbol and your wallet. Subscribe to it on the PONS WebSocket right away. They are null only if the prediction call failed — the receipt's TokenLaunched log carries both regardless.
  • quote is null when there is no dev buy.
  • Every amount is a decimal string in base units.

Example​

import { JsonRpcProvider, Wallet } from 'ethers';

const wallet = new Wallet(process.env.PRIVATE_KEY, new JsonRpcProvider('https://rpc.mainnet.chain.robinhood.com'));

const res = await fetch('https://rhc.pumpdev.io/api/create-local', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
publicKey: wallet.address,
name: 'My Token',
symbol: 'MINE',
image: 'https://example.com/logo.png',
twitter: 'https://x.com/mytoken',
buyAmount: 0.01,
snipeTaxExempt: ['0xTeamWallet1', '0xTeamWallet2'],
}),
});
const { transaction, token } = await res.json();
console.log('Token will be', token);

const sent = await wallet.sendTransaction(transaction);
const receipt = await sent.wait();
console.log('Launched in block', receipt.blockNumber);

transaction goes straight into wallet.sendTransaction() (ethers) or sendTransaction (viem) — every field is already set.


Error Responses​

All errors return JSON with an error field:

{ "error": "Description of what went wrong" }
HTTP StatusCause
400Missing required fields (publicKey, name, symbol, image), a value out of range (name > 64 bytes, symbol > 16, image > 512, description > 2048, a social link > 256, creatorTaxBps > 1000, more than 30 snipeTaxExempt addresses), a non-ETH pairToken, or Gas estimation failed: … — the launch reverted in simulation, almost always because publicKey cannot cover the launch fee + dev buy + ~4M gas
500Transaction build failed (RPC unavailable)
503Token creation is not configured on this server

Best Practices for a PONS Token Launch​

  1. Fund the wallet for the whole launch — launchFee (0.0005 ETH) + buyAmount + gas for ~4M units. Gas estimation runs against your balance, so an underfunded wallet fails at build time, not on chain.
  2. List the team in snipeTaxExempt — that is PONS's bundle mechanism; anyone not on the list pays up to 99% for three seconds. You are exempt automatically.
  3. Subscribe to token before you send — the address is deterministic, so a subscribeTokenTrade opened first sees the dev buy land.
  4. Leave slippage at the default — the curve is untouched when your buy executes, so the quote is exact; a tight floor only guards against a race.
  5. Keep creatorTaxBps modest — it is taken from every buy of your curve for its lifetime and is visible to every buyer.

Not supported yet​

  • ERC-20 pairs (USDG, tokenized equities such as AMD or SPY).
  • Vanity addresses — the salt is generated server-side.

The ETH pair is where most PONS launches happen; the others follow once this endpoint has run in production.


Next Steps​