Server integration
Pull Wardogs reputation data straight into your server’s ban list. The feed is a plain HTTP GET returning JSON, designed to be polled on a timer by whatever tooling you already run.
Choosing a feed
There are two, and picking the right one is the most consequential decision in this integration.
Only upheld reports from communities that carry scoring weight, plus objective offences from anywhere. This is the feed to auto-ban from: a name appearing here has survived review by a community with a track record.
Everything in TRUSTED plus upheld reports from communities that carry no weight — unverified, provisional or sanctioned. Useful for flagging a player for a human to look at. Do not auto-ban from this feed.
A community whose reports stopped counting still keeps its own servers protected: its bans remain in ADVISORY, so it can consume its own data. Losing scoring weight limits a community’s effect on everyone else, not its ability to run its own ban list.
Banlist endpoint
GET https://api.wardogs.social/api/v1/banlistQuery parameters, all optional:
| Parameter | Default | Meaning |
|---|---|---|
feed | TRUSTED | TRUSTED or ADVISORY. See above. |
minReports | 1 | Minimum upheld reports before a player is listed. 1–50. |
limit | 1000 | Rows per response. 1–5000. |
offset | 0 | Rows to skip. Page with this when a feed exceeds your limit. |
A response row looks like this:
{
"steamId64": "76561198000000001",
"personaName": "example",
"reputationScore": 12.5,
"acceptedReports": 3,
"offenseCodes": ["CHEATING", "TEAM_KILLING"],
"lastAcceptedAt": "2026-09-01T18:22:04Z"
}Treat steamId64 as a string. A SteamID64 is 17 digits, which exceeds the largest integer JavaScript can represent exactly — parsing one as a number silently rewrites the last digits and gives you a different account. In a ban list that means banning the wrong person. Most JSON parsers do this by default; use a string or big-integer parser.
Polling with ETags
The feed returns an ETag. Send it back as If-None-Match and an unchanged feed answers 304 Not Modified with no body, so polling every minute costs almost nothing.
# first call - note the ETag
curl -sS -D - -o banlist.json \
"https://api.wardogs.social/api/v1/banlist?feed=TRUSTED"
# subsequent calls - 304 when nothing changed
curl -sS -o banlist.json \
-H 'If-None-Match: "<etag from above>"' \
"https://api.wardogs.social/api/v1/banlist?feed=TRUSTED"The ETag covers the feed and minReports, so change either and you get a fresh response rather than a stale 304.
Offence codes
Every report carries one of these. The objective ones are matters of fact rather than judgement, so they count from any community regardless of its trust tier — that is what stops a brand-new community being unable to report someone destroying their own team’s vehicles.
The catalogue couldn’t be loaded. Fetch https://api.wardogs.social/api/v1/offense-types directly for the current list.
API keys
Reading the banlist needs no key — it is public data, and keeping it open means a server can protect itself before it has registered anything. A key is required only to submit reports programmatically, because that writes to other people’s reputations.
POST https://api.wardogs.social/api/v1/reports
X-Wardogs-Api-Key: <your key>
Content-Type: application/jsonA key authenticates as your community. Anything submitted with it lands in your accepted-ban rate and therefore in your trust tier, so keep it on the server and out of client-side mods and public repos. Keys are issued and revoked per community; revoking one takes effect immediately.
Key management lives in the community settings screen, which is not built yet. Until it is, ask a platform admin to issue one.
The API also publishes a machine-readable OpenAPI document at https://api.wardogs.social/v3/api-docs, which is authoritative if this page ever disagrees with it.