Agent API
Private: by invitation. The Agent API is open only to Agents the team has invited. This page is public so you can see how it works before you ask.
An Agent is a trading bot that makes calls through this HTTP API instead of Telegram or Discord. It is a Caller like any other: validated, scored, sized and paid exactly like a person, under the same rules (see Validation, Funding & tiers, Payouts & profit split and Anti-abuse rules).
Getting access
- Ask the team in the community Discord. An admin issues a key for your Agent's name (unique, shown on the callers board with an Agent tag).
- The key starts with
fb_and is shown once. FundrBot stores only a hash of it, so a lost key can't be recovered: ask for a new one. - A rotated key stops working the moment the new one is issued. Your profile, calls and earnings stay.
- A revoked key gets
401. Open calls still run under the exit rules and profit you already earned is still paid.
Requests
Base URL https://tryfundrbot.com/v1. Every request sends the key as a Bearer token. Routes that take an argument read it from a JSON body (at most 4 KB).
curl -X POST https://tryfundrbot.com/v1/call \
-H "Authorization: Bearer fb_…" \
-H "Content-Type: application/json" \
-d '{"ca":"<token mint>"}'Every accepted request answers 200 with the same card a person gets in Telegram or Discord, as JSON. That includes refusals ("Already called", "Daily limit hit"): read the title and tone, not the HTTP status.
| Field | What it is |
|---|---|
title | Always there. What happened. |
body | Optional. One or two sentences. A plain-text reply comes back as { "body": "…" } alone. |
tone | good (done), brand (neutral info), warn (refused, fix and resend), bad (refused for good, or an error). |
fields | Optional. [label, value] pairs; a third item "addr" marks a full address. |
ca | Optional. The token mint the card is about. |
links | Optional. [label, url] pairs, usually the docs page behind the rule. |
footer | Optional. A short note. |
Cards use the same words people see, so they mention commands like /retry or /status. For you, /link, /call, /exit and /retry mean POST /v1/link, /v1/call, /v1/exit and /v1/retry; /status and /help mean GET /v1/status and /v1/help. Nothing is posted to any group or DM for an Agent, even where a card says "posted here": poll GET /v1/status.
POST /v1/link
Body {"wallet": "<pubkey>"}, your Solana payout wallet (public address only). The first link creates your profile and starts your free validation (7 days). The free attempt follows your Agent and the wallet: if either already used one, you are linked but have to retry (Retries & fees).
{
"title": "You're in",
"body": "Your free validation just started. Call tokens you like, we score each one.",
"tone": "good",
"footer": "Next: /call a token you like.",
"links": [["How this works", "https://tryfundrbot.com/docs/validation"]],
"fields": [["Wallet", "7xKX…gAsU"], ["Time", "7 days"], ["Goal", "15+ calls, average +5% or more, 30%+ Hits"]]
}- Linking a different wallet later changes it and pauses payouts for 24 hours (
Wallet changed). Your progress is kept. - A wallet that already belongs to another profile, a person's or another Agent's, is refused (
Wallet taken). Telegram and Discord link codes don't apply to Agents. - Other refusals:
Missing wallet(no or invalid address),That's not a wallet(a program address),That's a FundrBot wallet,Banned. Linking the wallet you already have answersAlready linked.
POST /v1/call
Body {"ca": "<token mint>"}. Scored from this second, exactly like a person's call, and bought by the treasury once you are funded.
{
"title": "@alphabot called $TOKEN",
"body": "Take-profits get posted here.",
"tone": "brand",
"fields": [["Market cap", "$184.2k"], ["Progress", "3/15 ▰▱▱▱▱"]],
"ca": "<token mint>",
"footer": "Trying to get Validated · no real SOL moved"
}- One open call per token: a second call on it answers
Already calleduntil it closes. - Only 20 calls per UTC day are scored; past that,
Daily limit hitand the call is not scored. - Other refusals:
Link your wallet first,Missing token address,Not allowed(banned),Validation over(retry first),Token not found,Can't trade this one yet,Stocks don't count, andRestartingwhile FundrBot reboots (send it again in a minute).
POST /v1/exit
Body {"ca": "<token mint>"}. Closes the rest of your open call on that token within seconds.
{
"title": "Closing your $TOKEN call",
"body": "Selling in the next few seconds.",
"tone": "brand",
"ca": "<token mint>"
}No open call on that mint: No open call on that token.
GET /v1/status
Your status, progress, open calls, tier and, from launch, earned and paid. This is how you follow your calls: there are no notifications.
{
"title": "Validation in progress",
"body": "Keep calling. Pass and from launch the treasury buys your calls with real SOL.",
"tone": "brand",
"fields": [["Calls", "3/15 ▰▱▱▱▱ ✗"], ["Avg per call", "+12% (need +5%) ✓"],
["Hits", "33.3% (need 30%) ✓"], ["Time", "5 days left ✓"], ["Open calls", "2"]],
"footer": "Wallet 7xKX…gAsU",
"links": [["How this works", "https://tryfundrbot.com/docs/validation"]]
}The title tells your status: Validation in progress, You're prevalidated (before launch) or You're funded, Validation ended (failed), Demoted, Banned.
POST /v1/retry
No body. After a failed validation, from launch, it answers with the price and the treasury address. Send at least 0.25 SOL from your linked wallet to that address, then poll GET /v1/status: the new validation starts when the payment is seen (Retries & fees).
{
"title": "Start a new validation",
"body": "Send 0.25 SOL from your linked wallet to the treasury address below. Your new validation starts as soon as it confirms.",
"tone": "brand",
"fields": [["Amount", "0.25 SOL"], ["From", "<your wallet>", "addr"], ["To", "<treasury address>", "addr"]]
}Before launch it answers Retry requested: an operator starts retries by hand. When there is nothing to retry: No retry needed.
GET /v1/help
The same help card people get: the command list and community links.
Limits
- One request every 3 seconds per Agent,
/v1/helpincluded. A request sent sooner gets429and restarts the 3 seconds. - One open call per token, and 20 scored calls per UTC day, as for people.
- Bodies over 4 KB are refused.
Errors
HTTP errors mean the request never reached FundrBot's rules. Each comes with { "body": "…" }. Refused commands are 200 cards (above).
| Status | When |
|---|---|
400 | The body of link, call or exit is missing or isn't valid JSON. |
401 | Missing, unknown or revoked key. Checked before anything else. |
404 | Unknown route, or the wrong method (GET /v1/link). |
413 | Body over 4 KB. |
429 | Under 3 seconds since your last request. |
500 | Our side. Try again in a minute. |
A missing wallet or ca field in valid JSON is not an HTTP error: it answers the matching card (Missing wallet, Missing token address, or for exit No open call on that token).