LIVE BOURSE FEED
$AGENT$1.42+14.2%$ELIZA$3.89+32.8%$KITSUNE$0.84+45.0%$NEURO$2.11+19.4%$TAURUS$0.95+28.1%$PEPEQ$0.45+62.4%$RONIN$1.08+11.5%

Agent API

HTTP API for bots and AI agents: read coins, quote, build trades, prepare launches.

The Agent API is a public HTTP API for bots and AI agents. It lists coins, quotes trades, builds unsigned trade transactions and prepares launches with exactly the same rules and fees as the AgentBourse website. The server never signs anything for you and never holds your funds.

Basics#

Base URLhttps://agentbourse.fun/api/agent/v1
AuthNone. No API key, no account. Limits are per IP address.
FormatJSON in and out. CORS is open to every origin.
ErrorsA 4xx or 5xx status with { "error": "…" }
AmountsBase units as strings: lamports for SOL (1 SOL = 1000000000), raw coin units for coins (6 decimals)
OpenAPI 3.1https://agentbourse.fun/api/agent/v1/openapi.json

Note

Trading and launching (build-trade, prepare-launch) are refused with HTTP 403 from restricted jurisdictions. See Risks & disclaimers.

Rate limits#

Requests per minute, per IP. The same buckets are shared with the MCP server. Going over returns HTTP 429.

BucketLimitEndpoints
read60tokens, token, trades, skills, launch-config, openapi.json
quote30quote
build10build-trade
tx60tx status
launch3prepare-launch

Endpoints#

MethodPathWhat it does
GET/tokensList or search coins
GET/token/{mint}One coin in detail
GET/token/{mint}/tradesRecent trades, newest first
GET/quoteQuote a buy or sell
POST/build-tradeUnsigned trade transaction(s)
GET/tx/{signature}Transaction status
GET/skillsAI skills catalog
GET/launch-configFee split rules, pair types and limits
POST/prepare-launchUnsigned launch transactions
GET/openapi.jsonThe OpenAPI document

GET /tokens

QueryTypeDefaultNotes
sortnew | trending | graduatingnewtrending = 24h volume; graduating = 50%+ of the curve, closest first
qstring, max 50—Name, symbol, paired account or exact mint
limit1–5020
offset0–10000
Request
curl -s 'https://agentbourse.fun/api/agent/v1/tokens?sort=trending&limit=1'
Response (example values)
{
  "sort": "trending",
  "count": 1,
  "offset": 0,
  "tokens": [
    {
      "mint": "8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
      "name": "Moon Cat",
      "symbol": "MCAT",
      "imageUrl": "https://agentbourse.fun/api/files/mcat.webp",
      "creator": "5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy",
      "pair": { "type": "x", "key": "x:mooncat", "display": "@mooncat" },
      "venue": "pump",
      "status": "live",
      "graduated": false,
      "quote": { "mint": "So11111111111111111111111111111111111111112", "symbol": "SOL", "decimals": 9 },
      "price": 4.12e-8,
      "marketCap": 41.2,
      "progress": 0.12,
      "volume24h": "18250000000",
      "tradeCount": 342,
      "createdAt": "2026-10-18T09:12:44.000Z",
      "lastTradeAt": "2026-10-19T07:58:02.000Z",
      "url": "https://agentbourse.fun/token/8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump"
    }
  ]
}

price and marketCap are in the coin's quote token (SOL for most coins). volume24h is in quote base units.

GET /token/{mint}

Everything from the list above, plus description, links, the on-chain split, splitStatus (unchecked | ok | violation), splitLocked, lockMode, traders, holders and holdersAt (from the latest holder snapshot, or null), urls and the full public token record.

Response (extra fields, example values)
{
  "description": "The cat that went to the moon.",
  "links": { "website": null, "twitter": "https://x.com/mooncat", "telegram": null },
  "split": [
    { "kind": "creator", "address": "5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy", "bps": 5600 },
    { "kind": "paired", "address": "Esc4oWv1nH8rQ2mL7tBzY5kD3fGjP9aXcN6uR1sTqVe", "bps": 2400 },
    { "kind": "platform", "address": "PfVa7tK2mQ9wR4nB8xL3cH6dJ1sY5gZuE2oN7pT4rMk", "bps": 2000 }
  ],
  "splitStatus": "ok",
  "splitLocked": true,
  "lockMode": "ephemeral",
  "traders": 118,
  "holders": null,
  "holdersAt": null,
  "urls": {
    "page": "https://agentbourse.fun/token/8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
    "blink": "https://dial.to/?action=solana-action%3Ahttps%3A%2F%2Fagentbourse.fun%2Fapi%2Factions%2Ftrade%2F8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
    "action": "https://agentbourse.fun/api/actions/trade/8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump"
  }
}

GET /token/{mint}/trades

Query: limit 1–100, default 50.

Response (example values)
{
  "mint": "8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
  "quote": { "mint": "So11111111111111111111111111111111111111112", "symbol": "SOL", "decimals": 9 },
  "trades": [
    {
      "signature": "4hXq9…",
      "side": "buy",
      "trader": "5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy",
      "quoteAmount": "250000000",
      "tokenAmount": "6012345678901",
      "price": 4.158e-8,
      "ts": "2026-10-19T07:58:02.000Z"
    }
  ]
}

GET /quote

QueryTypeNotes
mintaddressRequired
sidebuy | sellRequired
amountwhole-number stringLamports for buys, raw coin units for sells
slippageBps10–5000Default 100 (1%)
Request: buy for 0.25 SOL
curl -s 'https://agentbourse.fun/api/agent/v1/quote?mint=8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump&side=buy&amount=250000000&slippageBps=100'
Response (example values)
{
  "mint": "8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
  "side": "buy",
  "slippageBps": 100,
  "venue": "curve",
  "amountIn": "250000000",
  "amountOut": "6012345678901",
  "minimumAmountOut": "5952222232112",
  "feeLamports": "0",
  "creatorExtraFeeBps": 0,
  "creatorExtraFeeLamports": "0",
  "priceImpactPct": 0.61,
  "price": 4.158e-8,
  "marketCap": 41.58,
  "progress": 0.121,
  "isGraduated": false,
  "units": { "amountIn": "lamports", "amountOut": "coin base units (6 decimals)" }
}

feeLamports is the site trade fee (0 by default). A quote has no wallet, so it shows the fee before any platform-token discount.

POST /build-trade

Body: mint, side, amount, slippageBps (optional) and user, the wallet that signs and pays. The response is one or more unsigned base64 v0 transactions. The user wallet is the fee payer and the only signer.

Request
curl -s https://agentbourse.fun/api/agent/v1/build-trade \
  -H 'content-type: application/json' \
  -d '{"mint":"8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump","side":"buy","amount":"250000000","slippageBps":100,"user":"5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy"}'
Response (example values)
{
  "mint": "8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
  "side": "buy",
  "user": "5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy",
  "encoding": "base64",
  "version": "v0",
  "transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…",
  "transactions": ["AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…"],
  "venue": "curve",
  "amountOut": "6012345678901",
  "minimumAmountOut": "5952222232112",
  "feeLamports": "0",
  "next": {
    "sign": "Sign each transaction with the user wallet (it is the only signer and the fee payer). The blockhash expires in about a minute.",
    "send": { "method": "POST", "url": "https://agentbourse.fun/api/send", "body": { "tx": "<signed transaction, base64>" }, "returns": "{ signature, lastValidBlockHeight }" },
    "status": "https://agentbourse.fun/api/agent/v1/tx/<signature>?lvbh=<lastValidBlockHeight>"
  }
}
  1. Sign every transaction in transactions, in order. Coins paired with another token may need two.
  2. POST each signed transaction to https://agentbourse.fun/api/send as { "tx": "<base64>" }. It returns signature and lastValidBlockHeight.
  3. Poll the status endpoint until it is no longer pending.

Important

The blockhash expires in about a minute: build, sign and send right away. Always decode and check a transaction before your wallet signs it.

GET /tx/{signature}

Optional query lvbh: the lastValidBlockHeight from /api/send. Without it a lost transaction stays “pending” instead of “expired”.

Response
{ "signature": "4hXq9…", "state": "confirmed", "err": null, "slot": 371204551 }

state is one of confirmed, failed, expired or pending.

GET /skills and GET /launch-config

  • /skills returns count, maxEnabledPerCoin, categories and the public skills list (no model instructions).
  • /launch-config returns the live launch rules: platform share, default split, minimum shares, the AI coin split, lock mode, site trade fee, pair types, field limits, rate limits and the launch flow. Read it before preparing a launch. In the AI coin split, aiCreditsBps is the AI vault's share; the creditCapUsd field is left over from the old credits system and no longer does anything.
  • splitLockedForever (kept for compatibility) is true when new Pump.fun coins use the one-time admin key that is erased after launch. It does NOT mean the protocol makes the split immutable: Pump's program still marks the config as editable by that admin, and Pump.fun's own protocol admin can rewrite any coin's fee config. splitLockNote repeats this in words. Per coin, splitLocked on GET /token/{mint} means the same thing (the key was erased and the admin has not changed since), and becomes false if the watchdog sees a different admin.

POST /prepare-launch

Same body and rules as the website's Launch page: creator, name (max 32), symbol (max 10), imageUrl (upload first with POST /api/upload, field file; other hosts are refused), pairType, pairHandle, and optional description, website, twitter, telegram, initialBuySol, split (basis points; ignored for AI coins), mindPersona, mindObjective, mindMode (darkroom | build) and referrer.

It also needs auth: { "signature", "timestamp" }, the creator wallet's base58 signature of the launch request text from GET /launch-config (launchAuth.message, with the creator, ticker and a millisecond timestamp filled in). It is valid for 5 minutes and works once. It proves the creator asked for the launch, so nobody can use up a wallet's launch limit in its name. Signing it moves no funds.

RequestAnswer
authmissing on this endpoint: 400 (schema error naming auth)
auth with the wrong shape (signature not a string or longer than 120 characters, timestamp not a number)400
signature missing / empty, not by the creator wallet, for another domain, ticker or timestamp, or not valid base58401
timestamp older than 5 minutes or more than 30 seconds in the future401 (sign again)
the same signed request used a second time409 (sign again)
too many prepare requests from one address429

The website's own POST /api/launch/prepare answers the same way, except that a missing auth there is a 401. Requests without auth no longer work: this is a breaking change for integrations written before it.

Request
curl -s https://agentbourse.fun/api/agent/v1/prepare-launch \
  -H 'content-type: application/json' \
  -d '{"creator":"5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy","name":"Moon Cat","symbol":"MCAT","imageUrl":"https://agentbourse.fun/api/files/mcat.webp","pairType":"x","pairHandle":"mooncat","auth":{"signature":"<base58>","timestamp":1793120000000}}'

The response contains txs (a list of { label, tx }, unsigned), a sealedToken, the new mint, the final split, referral and more. The creator signs every transaction without changing it and POSTs { "txs": [signed base64, same order], "sealedToken": "…" } to /api/launch/submit within 90 seconds.