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 Pairity website. The server never signs anything for you and never holds your funds.
Basics#
| Base URL | https://pairity.wtf/api/agent/v1 |
| Auth | None. No API key, no account. Limits are per IP address. |
| Format | JSON in and out. CORS is open to every origin. |
| Errors | A 4xx or 5xx status with { "error": "…" } |
| Amounts | Base units as strings: lamports for SOL (1 SOL = 1000000000), raw coin units for coins (6 decimals) |
| OpenAPI 3.1 | https://pairity.wtf/api/agent/v1/openapi.json |
Note
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.
| Bucket | Limit | Endpoints |
|---|---|---|
| read | 60 | tokens, token, trades, skills, launch-config, openapi.json |
| quote | 30 | quote |
| build | 10 | build-trade |
| tx | 60 | tx status |
| launch | 3 | prepare-launch |
Endpoints#
| Method | Path | What it does |
|---|---|---|
| GET | /tokens | List or search coins |
| GET | /token/{mint} | One coin in detail |
| GET | /token/{mint}/trades | Recent trades, newest first |
| GET | /quote | Quote a buy or sell |
| POST | /build-trade | Unsigned trade transaction(s) |
| GET | /tx/{signature} | Transaction status |
| GET | /skills | AI skills catalog |
| GET | /launch-config | Fee split rules, pair types and limits |
| POST | /prepare-launch | Unsigned launch transactions |
| GET | /openapi.json | The OpenAPI document |
GET /tokens
| Query | Type | Default | Notes |
|---|---|---|---|
sort | new | trending | graduating | new | trending = 24h volume; graduating = 50%+ of the curve, closest first |
q | string, max 50 | — | Name, symbol, paired account or exact mint |
limit | 1–50 | 20 | |
offset | 0–1000 | 0 |
curl -s 'https://pairity.wtf/api/agent/v1/tokens?sort=trending&limit=1'{
"sort": "trending",
"count": 1,
"offset": 0,
"tokens": [
{
"mint": "8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
"name": "Moon Cat",
"symbol": "MCAT",
"imageUrl": "https://pairity.wtf/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://pairity.wtf/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.
{
"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://pairity.wtf/token/8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
"blink": "https://dial.to/?action=solana-action%3Ahttps%3A%2F%2Fpairity.wtf%2Fapi%2Factions%2Ftrade%2F8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump",
"action": "https://pairity.wtf/api/actions/trade/8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump"
}
}GET /token/{mint}/trades
Query: limit 1–100, default 50.
{
"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
| Query | Type | Notes |
|---|---|---|
mint | address | Required |
side | buy | sell | Required |
amount | whole-number string | Lamports for buys, raw coin units for sells |
slippageBps | 10–5000 | Default 100 (1%) |
curl -s 'https://pairity.wtf/api/agent/v1/quote?mint=8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump&side=buy&amount=250000000&slippageBps=100'{
"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.
curl -s https://pairity.wtf/api/agent/v1/build-trade \
-H 'content-type: application/json' \
-d '{"mint":"8sWQd7Yk3nVb2LmP9rTfXc4hJzGqA1eKuNoR6pump","side":"buy","amount":"250000000","slippageBps":100,"user":"5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy"}'{
"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://pairity.wtf/api/send", "body": { "tx": "<signed transaction, base64>" }, "returns": "{ signature, lastValidBlockHeight }" },
"status": "https://pairity.wtf/api/agent/v1/tx/<signature>?lvbh=<lastValidBlockHeight>"
}
}- Sign every transaction in
transactions, in order. Coins paired with another token may need two. - POST each signed transaction to
https://pairity.wtf/api/sendas{ "tx": "<base64>" }. It returnssignatureandlastValidBlockHeight. - Poll the status endpoint until it is no longer pending.
Important
GET /tx/{signature}
Optional query lvbh: the lastValidBlockHeight from /api/send. Without it a lost transaction stays “pending” instead of “expired”.
{ "signature": "4hXq9…", "state": "confirmed", "err": null, "slot": 371204551 }state is one of confirmed, failed, expired or pending.
GET /skills and GET /launch-config
/skillsreturnscount,maxEnabledPerCoin,categoriesand the publicskillslist (no model instructions)./launch-configreturns 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,aiCreditsBpsis the AI vault's share; thecreditCapUsdfield is left over from the old credits system and no longer does anything.
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.
curl -s https://pairity.wtf/api/agent/v1/prepare-launch \
-H 'content-type: application/json' \
-d '{"creator":"5GmKx2pQv7rT9wLzN3cHdYb8sJfE4aRuV6kMnBqPt1Xy","name":"Moon Cat","symbol":"MCAT","imageUrl":"https://pairity.wtf/api/files/mcat.webp","pairType":"x","pairHandle":"mooncat"}'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.