GETEndpoint catalog
The available routes and request limit. /api/v1/catalog/ is an alias.
data: { endpoints: [{ path, description }], rateLimit: { requests, periodSeconds } }
Build with public WARDOGS data
Build a community dashboard, Discord bot or companion tool with public WARDOGS data served by FOBDROP. Each response identifies its source and collection credit. Start with one JSON request.
01 // First request
Base URL: https://fobdrop.com/api/v1/. All routes are read-only. Use GET for JSON, HEAD for headers, or OPTIONS for browser preflight.
curl --fail-with-body \
"https://fobdrop.com/api/v1/population/"const response = await fetch(
"https://fobdrop.com/api/v1/population/",
{ credentials: "omit" }
);
if (response.status === 429) {
const wait = response.headers.get("Retry-After");
throw new Error("Rate limited; retry after " + wait + " seconds");
}
const result = await response.json();
if (!response.ok) {
throw new Error(result.error?.message ?? "Data unavailable");
}
console.log(result.data.players, result.data.observedAt);Cross-origin requests are allowed. Omit cookies and credentials; the public API does not use your FOBDROP account or game session.
02 // Reference
Open any route to inspect its current response. Field lists below describe the data object inside the shared response envelope.
The available routes and request limit. /api/v1/catalog/ is an alias.
data: { endpoints: [{ path, description }], rateLimit: { requests, periodSeconds } }
The latest official Steam player count for WARDOGS (app 1867240), collected by FOBDROP. A measurement must be no more than 30 minutes old.
data: { appId, players, observedAt }
/api/v1/population/history/?hours=24
Use hours=6, 24, 72 or 168. The default is 24. Returns up to 1,008 collected points, oldest first. An empty window returns an empty points array.
data: { appId, hours, points: [{ observedAt, players }] }
Official and community server reports served by FOBDROP. Returns 503 when the directory is more than seven minutes old. Each server has its own observedAt; reports older than ten minutes are omitted and coverage becomes partial.
data: { asOf, coverage: "complete" | "partial", servers: [...] }
/api/v1/servers/{id}/
Replace {id} with a server id from /api/v1/servers/. Encode it as one URL path segment.
One server from the current directory, including its join code and reported settings. Uses the same seven-minute directory limit. Returns 404 when a fresh directory omits the ID, or 503 when the directory is unavailable.
data: { asOf, coverage, server: { id, joinCode, observedAt, ... } }
/api/v1/players/steam/{id}/
Replace {id} with the player’s 17-digit SteamID64. The linked player must share their verified game profile.
Verified levels, XP, season, cash and gold bars shared by a linked player. No FOBDROP sign-in is needed to read a public profile. Returns 404 when no shared verified profile exists. These reads do not contact the player or trigger a game refresh. Responses use no-store so sharing changes take effect immediately.
data: { steamId, game: { levels, wardog, mastery, totalCumulativeXp, seasonNumber, cash, goldBars, asOf: { levels, progression, wallet } } }
The live FOBDROP tools, with their names, descriptions and links. Feedback actions and future placeholders are excluded.
data: { tools: [{ id, name, description, url, version, status: "live" }] }
Reports availability separately for population and servers. Partial coverage returns 200 with status "partial". If both feeds are unavailable, it returns 503 with status "unavailable".
data: { status, checks: { population, servers } }
03 // Read the result
{
"meta": {
"provider": "FOBDROP",
"version": "1",
"generatedAt": "2026-10-27T12:01:00.000Z",
"source": {
"name": "Steam",
"collectedBy": "FOBDROP"
},
"docs": "https://fobdrop.com/developers/"
},
"data": {
"appId": 1867240,
"players": 1234,
"observedAt": "2026-10-27T12:00:00.000Z"
}
}meta.generatedAtmeta.sourcedata.observedAtasOf.datanull plus an error object. Health responses retain their availability checks.errorA measured count of 0 is valid. Treat unavailable data separately so your dashboard does not show a false population drop.
04 // Request responsibly
Cache-Control rather than polling more often.429 response includes Retry-After: 60; wait before retrying.503, keep your last known value with its timestamp or show unavailable. Use backoff instead of a tight retry loop.400 · invalid_hourshours value.404 · not_found405 · method_not_allowed429 · rate_limited503data_unavailable means measurements are missing or stale; api_unavailable means the service cannot currently accept the request.Server reference
Each server has a persistent id. Its current gameInstanceId can change after a restart. Open /servers/<id>/ for its reported details. A joinCode is supplied only when verified; it is never inferred from either ID.
Missing values are null. Zero and false are known values. A partial directory does not establish the total number of servers worldwide. Unknown password status or free public slots does not remove a server from the directory.
id, gameInstanceId, joinCode, name, region, official, serverNumberplayers, capacity, available, reserved, reservedCapacity, passworded, level, cash, maxPing. Reserved occupancy and reserved capacity are separate. Free public slots are not guessed from player counts. Limits are reported minimum/maximum pairs.map, gameMode, experiences, combined, infantry, hardcore, started. A known started uses Unix milliseconds; otherwise it is null.attributes contains only these typed, nullable public fields: sessionType, sessionMap, advertisedMap, sessionMode, gameModeClass, maxSpectators, persistProgression, build, compatibleBuild, buildConfiguration, scenarioState, sky, experience, variantMapName, scorePeriod, matchStartTicks. Map labels are preserved separately; raw match-start ticks are a decimal string and are not treated as a verified timestamp.Passwords, player rosters, private host addresses and arbitrary provider attributes are excluded.
05 // Public data
Population comes from Steam’s official player-count API. FOBDROP collects the history and provides tool metadata. Server measurements retain the original source, observation times and directory coverage. Missing or stale readings remain unavailable.
Public game profiles contain only verified values that linked players share. They include the public SteamID, levels, XP, season and wallet readings. Account records, private progression, authentication assertions and game tokens are never exposed.
When showing these measurements, credit FOBDROP and keep the original source and observation time visible. FOBDROP is independent and not affiliated with or endorsed by BULKHEAD or Team17.
Found a problem or need another public field? Talk to us in the FOBDROP Discord.