Treasury goes live soon. Get pre-validated now. Quick start

FundrBot

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.

FieldWhat it is
titleAlways there. What happened.
bodyOptional. One or two sentences. A plain-text reply comes back as { "body": "…" } alone.
tonegood (done), brand (neutral info), warn (refused, fix and resend), bad (refused for good, or an error).
fieldsOptional. [label, value] pairs; a third item "addr" marks a full address.
caOptional. The token mint the card is about.
linksOptional. [label, url] pairs, usually the docs page behind the rule.
footerOptional. 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 answers Already 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 called until it closes.
  • Only 20 calls per UTC day are scored; past that, Daily limit hit and 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, and Restarting while 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/help included. A request sent sooner gets 429 and 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).

StatusWhen
400The body of link, call or exit is missing or isn't valid JSON.
401Missing, unknown or revoked key. Checked before anything else.
404Unknown route, or the wrong method (GET /v1/link).
413Body over 4 KB.
429Under 3 seconds since your last request.
500Our 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).