Bot Endpoints — FBL v1 API
Search bots, fetch individual bot details, retrieve voter lists, check vote status, read stats, post server counts and sync your command list using the FBL v1 bot endpoints.
The bot endpoints let you search the FBL bot directory, retrieve details for a specific bot, check vote history, post server count statistics, and read or upload the bot's commands. All bot endpoints are subject to a rate limit of 60 requests per minute.
Bot endpoints have stricter rate limits than other v1 endpoints. Stay within 60 requests per minute to avoid 429 Too Many Requests errors.
The :id in every /bots/:id/... route accepts either the bot's Fluxer application/client id (recommended — the same snowflake your bot logs in with) or the FBL listing UUID. Use whichever is more convenient.
GET /bots
Searches the FBL bot directory with optional filtering, sorting, and pagination.
curl "https://fbl.gg/api/v1/bots?limit=10&sort=votes"
Query parameters
q stringSubstring match against name + short description. Alias: query.
category stringComma-separated list of tag slugs. Overlap match against the bot's tag list. Alias: tags.
language stringComma-separated ISO 639-1 codes. Filters by the bot's primary language_code. Alias: langs.
invites stringServer-count bucket. One of lt100, 100-1000, 1000-10000, gt10000.
votes numberMinimum vote_count.
sort string default:"votes"One of votes, newest, monthly_votes, recently_updated, invites. Descending on the sort column; featured bots always float first.
limit number default:"24"Number of bots to return. Clamped to 100.
offset number default:"0"Number of bots to skip before returning results. Use with limit for pagination.
page number default:"1"Alternative to offset. Computed as offset = (page - 1) * limit.
Response fields
results object[] requiredArray of Bot objects matching the query. See Bot structure below.
limit number requiredThe limit value used for this request.
offset number requiredThe offset value used for this request.
count number requiredNumber of results returned in this response.
total number requiredTotal number of bots matching the search query across all pages.
GET /bots/:id
Returns a single Bot object by its FBL listing id. Returns 404 Not Found if no bot with that id is listed on FBL.
curl https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888 \
-H "Authorization: your-fbl-token-here"
See the Bot structure section below for the full list of fields. Owner-only fields (webhook URL, webhook secret, API token hash) are stripped from the public response.
GET /bots/:id/votes
Returns the last 1,000 unique voters for the specified bot, most-recent first. Each entry includes the voter's username, Fluxer user id, and avatar URL.
curl https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888/votes \
-H "Authorization: your-fbl-token-here"
Auth: required. Token must belong to the bot in the path.
Response
Returns an array of voter objects:
username string requiredThe voter's Fluxer username.
id string requiredThe voter's Fluxer snowflake id.
avatar string?Full CDN URL of the voter's avatar. null if the user has no custom avatar.
Duplicates are removed — a user who has voted multiple times appears once, at their most recent timestamp. For higher-throughput consumers, use the vote webhook instead.
GET /bots/:id/stats
Returns the current server count for a bot.
curl https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888/stats
Auth: public.
Response fields
server_count numberCurrent server count. 0 if the bot has never posted stats.
GET /bots/:id/check
Checks whether a specific user has an active vote for the bot. Safe to call even if your bot has more than 1,000 monthly votes.
curl "https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888/check?userId=1493230087487714059" \
-H "Authorization: your-fbl-token-here"
Auth: required.
Query parameters
userId string requiredThe Fluxer snowflake id of the user to check.
Response
{ "voted": 1 }
A voted value of 1 means the user has voted in the past 12 hours. A value of 0 means they have not.
POST /bots/:id/stats
Posts updated server count statistics for the specified bot. Call this endpoint whenever your bot's server count changes, for example when it joins or leaves a guild.
curl -X POST https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888/stats \
-H "Authorization: your-fbl-token-here" \
-H "Content-Type: application/json" \
-d '{ "server_count": 1234 }'
Auth: required. Token must belong to the bot in the path.
Request body
server_count number requiredThe number of servers your bot is in.
Response
Returns 200 { "ok": true } on success.
GET /bots/:id/commands
Returns the bot's command list, in the order the owner set. The same list shows in the bot's Commands tab and in FBL's command search.
curl https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888/commands
Auth: public.
Response
{
"prefix": "!",
"updated_at": "2026-10-17T09:12:00.000Z",
"commands": [
{ "name": "remind", "description": "Set a reminder", "usage": "remind <time> <message>", "category": "Utility", "kind": "prefix" },
{ "name": "play", "description": "Play a song", "usage": null, "category": "Music", "kind": "slash" }
]
}
PUT /bots/:id/commands
Uploads the bot's full command list, replacing the old one. Call it when your bot starts so FBL always shows your current commands.
curl -X PUT https://fbl.gg/api/v1/bots/88888888-8888-8888-8888-888888888888/commands \
-H "Authorization: your-fbl-token-here" \
-H "Content-Type: application/json" \
-d '{ "commands": [{ "name": "remind", "description": "Set a reminder", "usage": "remind <time> <message>", "category": "Utility" }] }'
Auth: required. Token must belong to the bot in the path.
Request body
commands array requiredUp to 200 commands. Send an empty array to clear the list. Names must be unique per kind.
Each command:
name string required1 to 64 characters, without the prefix (a leading / is removed).
description stringWhat it does. Up to 300 characters.
usage stringHow to call it, without the prefix, e.g. remind <time> <message>. Up to 200 characters.
category stringGroups commands in the Commands tab. Up to 40 characters.
kind string"prefix" (default) for commands typed with your prefix, or "slash" for slash commands.
Response
Returns 200 { "ok": true, "count": 2 } on success, or 400 with the first problem, e.g. commands[3].name: "help" is listed twice.
Bot structure
Every bot endpoint that returns a Bot object uses the following structure:
| Field | Type | Description |
|---|---|---|
id | string | FBL listing UUID |
name | string | Bot display name |
username | string | Fluxer username |
avatar | string? | Full CDN URL of the bot's avatar |
short_description | string | Short description shown on listings |
long_description | string? | Full description (may contain Markdown) |
tags | string[] | List of category tag slugs |
language_code | string? | Primary ISO 639-1 language code |
prefix | string? | Bot command prefix |
invite_url | string? | Custom invite URL |
website_url | string? | Bot's website URL |
support_server_url | string? | Support server invite URL |
github_url | string? | GitHub repository URL |
owner_ids | string[] | FBL profile ids of the bot's owners |
vote_count | number | All-time vote count |
monthly_vote_count | number | Vote count for the current month |
server_count | number? | Current server count (if posted) |
certified | boolean | Whether the bot is FBL certified |
featured | boolean | Whether the bot is currently featured |
created_at | string | ISO 8601 date the bot was added to FBL |
Example bot object
{
"id": "88888888-8888-8888-8888-888888888888",
"name": "Nimbus",
"username": "nimbus",
"avatar": "https://fluxerusercontent.com/avatars/.../a.png",
"short_description": "A modern moderation and utility bot.",
"long_description": "Nimbus helps you run your Fluxer server…",
"tags": ["moderation", "utility", "logging"],
"language_code": "en",
"prefix": "n!",
"invite_url": "https://fluxer.gg/oauth2/authorize?...",
"website_url": "https://nimbus.gg",
"support_server_url": "https://fluxer.gg/ALjYue2O",
"github_url": null,
"owner_ids": ["88888888-aaaa-bbbb-cccc-000000000001"],
"vote_count": 23894,
"monthly_vote_count": 412,
"server_count": 120540,
"certified": false,
"featured": true,
"created_at": "2025-09-02T14:03:22.000Z"
}