VoteServeur API v1
Vote rewards for the 68 games in the catalogue. Same API everywhere: server_token + a single identity field (username, Steam or Discord — auto-detected).
Base URL
https://voteserveur.fr/api/v1
JSON UTF-8. IP rate-limit: ~90 req / min on public read endpoints; claims are stricter.
Authentication
The server_token (40–64 chars) is visible only to the owner (server management). Keep it secret.
- Query:
?server_token=TOKEN - Header:
X-Server-Token: TOKEN - Header:
Authorization: Bearer TOKEN
Without a valid token → 404 (does not reveal whether the slug exists).
Player flow (step by step)
- Create your listing at /en/serveurs/nouveau.
- Download the pack at /en/plugins/{game} (token already injected).
- Install the plugin / start the poller (see
INSTALL.txtin the ZIP). Recommended interval: 10 minutes. - The player votes with the reward box checked and enters one identifier (username / Discord / Steam) — they get a claim code (e.g.
/vsclaim ABC123). - Your script calls
GET /votes/pendingthenGET /votes/claim?identity=…→ ifclaimed = 1, grant the reward once. Or the player claims viaclaim-code. - Optional:
votes/playerfor monthly tiers (5 / 10 / 30 votes…).
GET /votes/claim (recommended)
Unified claim: one identity parameter. The API auto-detects username / SteamID64 / Discord. Endpoints claim-username / claim-steam / claim-discord remain available (compat).
GET https://voteserveur.fr/api/v1/votes/claim?server_token=TOKEN&identity=Pseudo
GET https://voteserveur.fr/api/v1/votes/claim?server_token=TOKEN&identity=76561198000000000
GET https://voteserveur.fr/api/v1/votes/claim?server_token=TOKEN&identity=123456789012345678
Same claimed 0 / 1 / 2 schema as legacy claims.
GET /votes/claim-username
Claims a vote from the last 2 hours via username or first-last name. Votes cannot be injected.
GET https://voteserveur.fr/api/v1/votes/claim-username?server_token=TOKEN&playername=Pseudo
GET https://voteserveur.fr/api/v1/votes/claim-username?server_token=TOKEN&playername=Jean%20Dupont
{
"code": 200,
"success": true,
"claimed": 1,
"message": "Vote claimed"
}
claimed: 0— no eligible voteclaimed: 1— claimed now → grant the rewardclaimed: 2— already claimed
Username variants (Bob, Bob!, B o b, Jean Dupont / JeanDupont) are merged (same player).
GET /votes/claim-steam
GET https://voteserveur.fr/api/v1/votes/claim-steam?server_token=TOKEN&steam_id=76561198000000000
Same response schema as claim-username.
GET /votes/claim-discord
Claim via Discord ID (17–20 digit snowflake). Useful for Discord, Discord-linked Habbo, bots, etc.
GET https://voteserveur.fr/api/v1/votes/claim-discord?server_token=TOKEN&discord_id=123456789012345678
Also accepts mention format <@123…>. Same response schema as claim-username.
GET /votes/claim-code
Claim via the one-shot code shown after voting (6 chars, valid 2 h). Recommended in-game command: /vsclaim ABC123.
GET https://voteserveur.fr/api/v1/votes/claim-code?server_token=TOKEN&code=ABC123
Same claimed 0/1/2 schema. If the vote had a username, the response may include playername.
GET /votes/check
Checks without consuming: 0 not voted · 1 already claimed · 2 voted unclaimed.
GET https://voteserveur.fr/api/v1/votes/check?server_token=TOKEN&playername=Pseudo
GET /votes/check-steam
GET https://voteserveur.fr/api/v1/votes/check-steam?server_token=TOKEN&steam_id=7656119…
GET /votes/check-discord
GET https://voteserveur.fr/api/v1/votes/check-discord?server_token=TOKEN&discord_id=123456789012345678
GET /votes/check-ip
Whether the HTTP client IP has a recent vote (anti-abuse for plugins). Token required.
GET https://voteserveur.fr/api/v1/votes/check-ip?server_token=TOKEN
GET /votes/last
Latest votes (~1 h window) — debug / Discord overlay.
GET https://voteserveur.fr/api/v1/votes/last?server_token=TOKEN
GET /votes/pending
Unclaimed votes in the claim window (2 h), reward box checked. One request for the whole server — poll about every ~10 minutes — the API returns all unclaimed voters at once.
GET https://voteserveur.fr/api/v1/votes/pending?server_token=TOKEN&limit=50
{
"success": true,
"votes": [
{ "id": "…", "playername": "Pseudo", "steam_id": null, "discord_id": "123…", "created_at": "…", "created_ts": 1710000000 }
]
}
Then call claim?identity=… for each matching online player.
GET /votes/top
Aggregated player ranking. Params: period=month|day|all, limit (max 50).
GET https://voteserveur.fr/api/v1/votes/top?server_token=TOKEN&period=month&limit=10
GET /votes/player (alias /votes/stats)
Player stats (month / total) — useful for universal poller tiers.
GET https://voteserveur.fr/api/v1/votes/player?server_token=TOKEN&playername=Pseudo
GET https://voteserveur.fr/api/v1/votes/stats?server_token=TOKEN&steam_id=7656119…
{
"success": true,
"player_name": "Pseudo",
"votes_month": 12,
"votes_total": 48
}
GET /server
Public info for the listing linked to the token.
GET https://voteserveur.fr/api/v1/server?server_token=TOKEN
GET /servers/{token}
Path variant: /servers/{token}, /full, /stats, /advices, /players-ranking.
GET https://voteserveur.fr/api/v1/servers/TOKEN
GET https://voteserveur.fr/api/v1/servers/TOKEN/full
GET https://voteserveur.fr/api/v1/servers/TOKEN/stats
GET https://voteserveur.fr/api/v1/servers/TOKEN/advices
GET https://voteserveur.fr/api/v1/servers/TOKEN/players-ranking
Codes & errors
200— OK (even if claimed: 0)400— missing / invalid parameters404— unknown token429— rate-limit
Scripts & plugins
ZIP pack generated for each game (native and/or universal poller), token injected, owner-only:
- Plugins index — one install guide per game
- GTA: FiveM + RageMP + SA-MP in the same ZIP
- Step-by-step server guides: /en/guides
curl example
# Claim
curl -s -H 'X-Server-Token: TOKEN' \
'https://voteserveur.fr/api/v1/votes/claim-username?playername=Nayvroxi'
# Monthly stats (tiers)
curl -s -H 'X-Server-Token: TOKEN' \
'https://voteserveur.fr/api/v1/votes/player?playername=Nayvroxi'