v2 Robinhood Chain · 4663

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.

Base URL https://api.ponsportal.fun
Rate Limits

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.

Read endpoints: 200 req / 15 min per IP. Build endpoints (POST): 30 req / min per IP. Limit headers included via RateLimit-* fields.
Errors

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." }
Token Data

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.

GET
/token/{address}
Full launch record for a token deployed through the Pons v2 factory.
Path Parameters
NameTypeDescription
address*addressERC-20 token contract address
Request
curl https://api.ponsportal.fun/token/0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e
Response
{
  "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"
}
GET
/token/{address}/price
Bonding curve price, reserves, and graduation progress. Returns simplified response for graduated tokens.
Request
curl https://api.ponsportal.fun/token/0xAbCd...1234/price
Response (pre-graduation)
{
  "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
}
GET
/token/{address}/fees?wallet={wallet}
Escrow ETH balance and unswept curve fees for a wallet.
Request
curl "https://api.ponsportal.fun/token/0xAbCd...1234/fees?wallet=0xDead...BeEf"
Response
{
  "ok": true, "wallet": "0xDead...BeEf",
  "escrowEthFormatted": "0.12",
  "unsweptFormatted": "0.0168",
  "totalPendingFormatted": "0.1368",
  "phase": 0, "phaseLabel": "NotGraduated"
}
GET
/token/{address}/holders
Paginated token holder list sourced from Blockscout. ?limit=50&page=1
Request
curl "https://api.ponsportal.fun/token/0xAbCd...1234/holders?limit=10&page=1"
Escrow

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.

GET
/escrow?wallet={wallet}
ETH claimable from the global escrow contract for any wallet.
Request
curl "https://api.ponsportal.fun/escrow?wallet=0xDead...BeEf"
Response
{
  "ok": true, "wallet": "0xDead...BeEf",
  "escrow": "0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e",
  "ethFormatted": "0.12", "claimable": true
}
Build Calldata

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.

POST
/build/claim
Unsigned claim() - withdraw ETH from escrow.
Request
curl -X POST https://api.ponsportal.fun/build/claim \
  -H "Content-Type: application/json" \
  -d '{"wallet":"0xDead...BeEf"}'
Response
{
  "ok": true, "claimable": true, "balanceFormatted": "0.12",
  "tx": { "to": "0xd3AF...", "data": "0x4e71d92d", "value": "0x0", "chainId": 4663, "gasEstimate": "62000" }
}
POST
/build/claim-token
Unsigned claimToken(address) - withdraw an ERC-20 from escrow. Body: wallet, token.
Request
curl -X POST https://api.ponsportal.fun/build/claim-token \
  -H "Content-Type: application/json" \
  -d '{"wallet":"0xDead...BeEf","token":"0xAbCd...1234"}'
POST
/token/{address}/build/sweep
Unsigned sweepFees(0) on the bonding curve. Phase 0 only. Body: wallet.
Request
curl -X POST https://api.ponsportal.fun/token/0xAbCd...1234/build/sweep \
  -H "Content-Type: application/json" \
  -d '{"wallet":"0xDead...BeEf"}'
POST
/token/{address}/build/buy
Build an unsigned buy transaction - bonding curve (phase 0) or V4 Universal Router (phase 2+). Body: wallet, amountEth (decimal or wei), optional minTokensOut.
Request
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"}'
Response
{
  "ok": true, "quoteInEth": "0.1", "snipeTaxBps": 0,
  "tx": { "to": "0x9fGh...", "value": "0x16345785d8a0000", "chainId": 4663, "gasEstimate": "220000" }
}
POST
/token/{address}/build/sell
Build an unsigned sell transaction - bonding curve (phase 0) or V4 Universal Router (phase 2+, returns approval + sell tx). Body: wallet, tokenAmount (wei), optional minQuoteOut.
Request
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"}'
Response (phase 2+ graduated)
{
  "ok": true, "route": "v4-universal-router",
  "approve_tx": { "to": "0xAbCd...", "data": "0x095ea7b3...", "chainId": 4663 },
  "sell_tx": { "to": "0x88767...", "data": "0x3593564c...", "value": "0x0", "chainId": 4663 }
}
POST
/token/{address}/build/burn
Build a two-step burn: buy tokens (phase-aware) then transfer them to the dead address. Returns buy_tx and burn_tx calldata - sign and broadcast in order. No funds touch this API.
Body parameters
FieldTypeRequiredDescription
walletaddressYesWallet sending both transactions.
amountEthstringNoETH 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.
minTokensOutstringNoMinimum tokens to receive from the buy (wei). Defaults to 0 (no slippage guard).
burnAmountstringNoExact 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.
Two-step flow. The buy and burn are separate on-chain transactions. Broadcast 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.
Request
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"}'
Response
{
  "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
  }
}