> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.fluxerlist.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.fluxerlist.com/_mcp/server.

# Check a vote

The voters endpoints are great for paging through everyone who's ever voted, but sometimes you just need to know about one person right now - for example, gating a `/vote` command's reward on whether they've actually voted today. The check endpoints answer that in a single call instead of paging through the full list.

You'll need an [API key](/api-quickstart). Bot checks work for the bot's owner or a listed developer; server checks work for the server's **owner only** - co-admins can't use it.

## The endpoints

| Listing | Endpoint                         | `{id}` is                                            |
| ------- | -------------------------------- | ---------------------------------------------------- |
| Bot     | `GET /api/v1/bots/{id}/check`    | Your Fluxer bot ID, FluxerList UUID, or listing slug |
| Server  | `GET /api/v1/servers/{id}/check` | Your Fluxer guild ID                                 |

Both take one query parameter.

| Parameter  | Required | Description                                       |
| ---------- | -------- | ------------------------------------------------- |
| `fluxerId` | Yes      | The Fluxer user ID to check, as a numeric string. |

```json
{ "voted": true, "votes": 128 }
```

`voted` is whether that specific user currently has an active vote. `votes` is the listing's total vote count, included so you don't need a separate call if you're already showing it somewhere.

## Gate a reward

**`JavaScript`**

```javascript title="JavaScript"
async function hasVoted(botId, fluxerId) {
  const res = await fetch(
    `https://fluxerlist.com/api/v1/bots/${botId}/check?fluxerId=${fluxerId}`,
    { headers: { Authorization: `Bearer ${process.env.FLUXERLIST_KEY}` } },
  );
  if (!res.ok) throw new Error(`FluxerList returned ${res.status}`);
  const { voted } = await res.json();
  return voted;
}

// Inside your /vote-reward command handler:
if (!(await hasVoted(process.env.BOT_ID, interaction.user.id))) {
  return interaction.reply("Vote for us on FluxerList first, then come back!");
}
```

**`Python`**

```python title="Python"
import os
import requests

def has_voted(bot_id: str, fluxer_id: str) -> bool:
    res = requests.get(
        f"https://fluxerlist.com/api/v1/bots/{bot_id}/check",
        params={"fluxerId": fluxer_id},
        headers={"Authorization": f"Bearer {os.environ['FLUXERLIST_KEY']}"},
        timeout=10,
    )
    res.raise_for_status()
    return res.json()["voted"]
```

**`curl`**

```bash title="curl"
curl "https://fluxerlist.com/api/v1/bots/$BOT_ID/check?fluxerId=123456789" \
  -H "Authorization: Bearer $FLUXERLIST_KEY"
```

> **Tip**
>
> This endpoint is capped at 60 requests/min per key (see [Rate limits](/api-quickstart#rate-limits)), so it's fine to call it live when a user runs a command - just don't poll it in a loop for every member.

## Troubleshooting

#### I get 400

`fluxerId` is missing or isn't a numeric string. Send the raw Fluxer user ID, not a username or mention.

#### I get 403 Forbidden

For a bot, the key isn't tied to the owner or a listed developer. For a server, the key must belong to the **owner** specifically - a co-admin's key won't work here even though it can manage the listing elsewhere.

#### I get 404

Double-check the ID. Bots accept a Fluxer bot ID, FluxerList UUID, or listing slug; servers only accept the Fluxer guild ID.

#### voted is false but I just voted

Votes expire after 12 hours. If it's been longer than that, `voted` correctly reflects that the vote is no longer active.

## Related

#### [Reward your voters](/reward-voters)

Page through every voter instead of checking one at a time.

#### [API reference](/overview)

Every parameter and response.