Pons Portal API
Pons Portal is the open REST API layer above the Pons v2 token launchpad on Robinhood Chain (chain ID 4663). Every endpoint reads directly from on-chain contract state - no caching, no intermediary database, no accounts needed. Pass a token address to get live bonding curve data, graduation progress, fee balances, and paginated holder lists. Pass a wallet address to check claimable escrow balances or build the unsigned calldata for buy, sell, sweep, and claim transactions. Sign and broadcast yourself - no funds or private keys ever touch this API.
The API is public and requires no authentication. To keep it stable and available for everyone, requests are rate-limited per IP address. Limits are generous for normal integration use - only heavy automated polling will run into them. When a limit is hit the response is a JSON error with ok: false, not a silent failure, and standard RateLimit-* headers tell you when the window resets.
RateLimit-* fields.Every response - successful or not - comes back as JSON with the same shape: check ok first, then read the payload or the error string. Common causes of errors: an address that was never launched through the Pons v2 factory returns 404; a malformed address string returns 400; exceeding the rate limit returns 429. HTTP status codes mirror the ok flag - no silent 200s with hidden failures.
// 404 - token not found in factory { "ok": false, "error": "Token not found in pons v2 factory" } // 429 - rate limited { "ok": false, "error": "Rate limit exceeded. Try again shortly." }
These endpoints expose the full lifecycle of a Pons v2 token - from its factory launch record through bonding curve mechanics and into the holder distribution. All data is read live from chain on every request, no stale intermediary state. Phase 0 means the token is still trading on its bonding curve; phase 2 means it has hit the graduation threshold and moved to a Uniswap v4 pool. Prices and reserve amounts are always available in both raw wei and human-readable formatted strings.
| Name | Type | Description |
|---|---|---|
| address* | address | ERC-20 token contract address |
curl https://api.ponsportal.fun/token/0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e
{
"ok": true,
"token": "0xAbCd...1234",
"curve": "0x9fGh...5678",
"deployer": "0xDead...BeEf",
"creatorFeeRecipient": "0xDead...BeEf",
"pairToken": "0x0000000000000000000000000000000000000000",
"pairTokenLabel": "ETH",
"buybackEnabled": true,
"creatorTaxBps": 100,
"graduationThreshold": "24000000000000000000",
"phase": 0,
"phaseLabel": "NotGraduated",
"sweptQuote": "0",
"sweptAt": 0,
"blockscoutUrl": "https://robinhoodchain.blockscout.com/token/0xAbCd...1234"
}
curl https://api.ponsportal.fun/token/0xAbCd...1234/price
{
"ok": true, "phase": 0, "phaseLabel": "NotGraduated",
"priceEth": 4.2e-9, "priceEthFormatted": "4.200000e-9",
"raisedEth": "4.2", "thresholdEth": "24.0",
"progressPercent": 17.5, "readyToGraduate": false,
"feeBps": 100, "creatorTaxBps": 100, "totalFeePct": 2
}
curl "https://api.ponsportal.fun/token/0xAbCd...1234/fees?wallet=0xDead...BeEf"
{
"ok": true, "wallet": "0xDead...BeEf",
"escrowEthFormatted": "0.12",
"unsweptFormatted": "0.0168",
"totalPendingFormatted": "0.1368",
"phase": 0, "phaseLabel": "NotGraduated"
}
curl "https://api.ponsportal.fun/token/0xAbCd...1234/holders?limit=10&page=1"
When trades happen on a Pons bonding curve, protocol and creator fees accumulate in a shared escrow contract rather than being transferred immediately. Any wallet with a pending balance can claim at any time - protocol takes nothing extra for that. These endpoints let you check what's claimable for a given wallet and build the claim transaction when there's something to collect. Useful for fee-tracking dashboards, bots that auto-claim on behalf of creators, or any integration that needs to surface pending balances.
curl "https://api.ponsportal.fun/escrow?wallet=0xDead...BeEf"
{
"ok": true, "wallet": "0xDead...BeEf",
"escrow": "0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e",
"ethFormatted": "0.12", "claimable": true
}
Build endpoints are the Pons Portal equivalent of a transaction builder. You describe what you want to do - buy, sell, sweep fees, claim escrow - and the API returns a fully-formed unsigned transaction object. No funds or private keys ever touch this API. Take the tx object, sign it client-side with any wallet (wagmi, ethers, viem, raw RPC), and broadcast it directly to the Robinhood Chain RPC. This pattern makes build endpoints safe to use from any environment: browser frontends, server backends, mobile apps, CLI bots.
curl -X POST https://api.ponsportal.fun/build/claim \
-H "Content-Type: application/json" \
-d '{"wallet":"0xDead...BeEf"}'
{
"ok": true, "claimable": true, "balanceFormatted": "0.12",
"tx": { "to": "0xd3AF...", "data": "0x4e71d92d", "value": "0x0", "chainId": 4663, "gasEstimate": "62000" }
}
curl -X POST https://api.ponsportal.fun/build/claim-token \
-H "Content-Type: application/json" \
-d '{"wallet":"0xDead...BeEf","token":"0xAbCd...1234"}'
curl -X POST https://api.ponsportal.fun/token/0xAbCd...1234/build/sweep \
-H "Content-Type: application/json" \
-d '{"wallet":"0xDead...BeEf"}'
curl -X POST https://api.ponsportal.fun/token/0xAbCd...1234/build/buy \
-H "Content-Type: application/json" \
-d '{"wallet":"0xDead...BeEf","amountEth":"0.1","minTokensOut":"0"}'
{
"ok": true, "quoteInEth": "0.1", "snipeTaxBps": 0,
"tx": { "to": "0x9fGh...", "value": "0x16345785d8a0000", "chainId": 4663, "gasEstimate": "220000" }
}
curl -X POST https://api.ponsportal.fun/token/0xAbCd...1234/build/sell \
-H "Content-Type: application/json" \
-d '{"wallet":"0xDead...BeEf","tokenAmount":"5000000000000000000000000","minQuoteOut":"0"}'
{
"ok": true, "route": "v4-universal-router",
"approve_tx": { "to": "0xAbCd...", "data": "0x095ea7b3...", "chainId": 4663 },
"sell_tx": { "to": "0x88767...", "data": "0x3593564c...", "value": "0x0", "chainId": 4663 }
}
| Field | Type | Required | Description |
|---|---|---|---|
wallet | address | Yes | Wallet sending both transactions. |
amountEth | string | No | ETH to spend on the buy step (decimal like "0.05" or wei string). Omit to skip the buy and only get a burn_tx for tokens already held. |
minTokensOut | string | No | Minimum tokens to receive from the buy (wei). Defaults to 0 (no slippage guard). |
burnAmount | string | No | Exact token amount to burn (wei). Defaults to the wallet's current on-chain balance. Use this after the buy has confirmed and you know the exact received amount. |
buy_tx first, wait for confirmation, then broadcast burn_tx. If the wallet had zero tokens at call time and you provided amountEth, re-call with the post-buy burnAmount (or let the burn_tx query live balance - it uses balanceOf at broadcast time). The burn transfers tokens to 0x000...dead, which holds no key and can never move them.curl -X POST https://api.ponsportal.fun/token/0xAbCd...1234/build/burn \
-H "Content-Type: application/json" \
-d '{"wallet":"0xDead...BeEf","amountEth":"0.05","minTokensOut":"0"}'
{
"ok": true,
"buy_tx": {
"label": "Step 1 - Buy",
"route": "v4-universal-router",
"to": "0x88767...", "value": "0xb1a2bc2ec50000",
"data": "0x3593564c...", "chainId": 4663
},
"burn_tx": {
"label": "Step 2 - Burn (after buy confirms)",
"to": "0xAbCd...1234",
"data": "0xa9059cbb000...000dead...", "value": "0x0",
"chainId": 4663
}
}