Wipe map voting API
Display your RustCommander map votes on your own website while RustCommander handles schedules, maps, results and verified Steam voting.
https://api.rustcommander.app RustCommander obtains it through Steam OpenID on the hosted page. Custom websites may submit a SteamID only from a trusted backend using a user-owned API key.
Quick start
- Create and enable a public voting page in RustCommander.
- Copy its slug, for example
rust-community. - Fetch the page endpoint from your server and render its servers and votes.
- Use each vote's returned
publicUrlfor the “Vote with Steam” action. - For a custom voting UI, create an API key in Account → Developer API.
- Refresh open votes every 30–60 seconds if you display live results.
const API_URL = "https://api.rustcommander.app";
export async function getMapVotingPage(slug) {
const response = await fetch(
`https://api.rustcommander.app/servers/public/map-vote-pages/${encodeURIComponent(slug)}`,
{ headers: { Accept: "application/json" } }
);
if (!response.ok) {
throw new Error(`RustCommander returned HTTP ${response.status}`);
}
return response.json();
} Server-side requests are recommended. They avoid browser CORS differences and let your application cache the response before returning it to visitors.
Get an organization voting page
Returns every server assigned to the page and its scheduled, open and completed map votes. Cancelled votes are excluded.
/servers/public/map-vote-pages/:slug {
"name": "Rust community",
"slug": "rust-community",
"logoUrl": "https://example.com/logo.png",
"accentColor": "#78a94b",
"publicUrl": "https://panel.rustcommander.app/vote/rust-community",
"servers": [
{
"id": "42",
"name": "EU Main",
"votes": [/* map vote objects */]
}
]
} Get one map vote
Use the vote's stable publicId when you only need a single voting event.
This endpoint does not require an API key.
/servers/public/map-votes/:publicId {
"publicId": "58d13d9c-0d10-4b37-a114-6bb0388bb81d",
"serverName": "EU Main",
"title": "Next wipe map",
"status": "open",
"resultsVisibility": "live",
"wipeAt": "2026-10-15T14:00:00.000Z",
"opensAt": "2026-10-12T14:00:00.000Z",
"closesAt": "2026-10-15T13:00:00.000Z",
"winnerMapId": null,
"totalVotes": 27,
"publicUrl": "https://panel.rustcommander.app/map-vote/58d13d9c-...",
"candidates": [
{
"mapId": "3bab51dee18b4170a96bd8dffd99bee4",
"label": "Map 1",
"seed": 546307982,
"worldSize": 3750,
"imageUrl": "https://api.rustcommander.app/storage/maps/...png",
"votes": 18,
"percentage": 66.7
}
],
"createdAt": "2026-10-12T12:00:00.000Z",
"updatedAt": "2026-10-12T15:30:00.000Z"
} Important fields
| Field | Description |
|---|---|
publicId | Stable public identifier for the voting event. |
status | scheduled, open, closed or cancelled. |
publicUrl | Secure RustCommander page where the visitor signs in and votes. |
candidates | Maps with seed, world size, preview image and any visible result. |
votes / percentage | Numbers when results are visible; otherwise null. |
winnerMapId | Winning candidate after the vote closes, otherwise null. |
API keys and voting
You can use the hosted RustCommander flow or register a ballot from your own backend. Both methods store one vote against a 17-digit SteamID64.
Option 1: hosted Steam verification
Use publicUrl as the target of your vote button. RustCommander redirects
the visitor to Steam, verifies the OpenID response and saves the vote.
<!-- Use publicUrl from the API. Do not build this URL manually. -->
<a href="https://panel.rustcommander.app/map-vote/VOTE_PUBLIC_ID">
Vote with Steam
</a> Option 2: custom voting UI
Create an API key from Account → Developer API. The secret is displayed once. It can
register votes only for servers you currently own or where your account has the
Wipes permission. Send it only from your backend.
/servers/public/map-votes/:publicId/integrations/ballot const response = await fetch(
"https://api.rustcommander.app/servers/public/map-votes/VOTE_PUBLIC_ID/integrations/ballot",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-RustCommander-API-Key": process.env.RUSTCOMMANDER_VOTE_API_KEY
},
body: JSON.stringify({
mapId: "3bab51dee18b4170a96bd8dffd99bee4",
steamId: "76561198000000000",
displayName: "Player name"
})
}
);
if (!response.ok) throw new Error(`Vote failed: ${response.status}`);
const updatedVote = await response.json(); | Value | Requirement |
|---|---|
X-RustCommander-API-Key | Required. Keep it in a server-side secret or environment variable. |
mapId | Required. Must match a candidate returned by the vote endpoint. |
steamId | Required. A valid 17-digit SteamID64 verified by your authentication system. |
displayName | Optional. Stored with the ballot and limited to 120 characters. |
- One ballot is stored per Steam account and voting event.
- Voting again changes the existing selection; it does not create a second vote.
- The choice can be changed while the vote remains open.
- Your backend must verify ownership of the SteamID before submitting the ballot.
- Never expose an API key in browser JavaScript, HTML, a mobile binary or a public repository.
- Revoking a key disables external writes immediately.
- Access is checked on every request. Removing a server or its
Wipespermission makes the key stop working for that server.
Results visibility
The organization controls when totals are returned:
live: totals and percentages are available while voting is open.after_close: results remainnulluntil the vote closes.hidden: public totals remainnull.
Integrations must handle totalVotes, candidate votes and
percentage as nullable values. A hidden result is not zero votes.
Errors and caching
| Status | Meaning |
|---|---|
400 | The slug, map candidate or SteamID64 is invalid. |
401 | The integration API key is missing, invalid or revoked. |
403 | The key does not have access to the vote's server. |
404 | The page is disabled, missing or the vote does not exist. |
409 | The voting event is not open or has already closed. |
Cache scheduled and closed data when practical. For an open vote, polling every 30–60 seconds is enough for a responsive UI without unnecessary traffic.