Skip to content
API

Steam account bans

Steam ban API: VAC, game and trade bans

Read the ban signals Steam publishes for an account: VAC bans, game bans, community bans and economy bans, with the number of days since the last ban.

Updated

GET /v1/player-security
curl --fail-with-body \
  -H "Authorization: Bearer $WOK_API_KEY" \
  "https://woksteamapi.com/v1/player-security?steam_id=76561198000000001&include_details=1"

Endpoints

A WOK key with all-purpose or Players access. Free Developer keeps its own quota, day and minute limits and the WOK Discord membership rule. Each single read uses one quota unit.

GET /v1/player-securityVAC, game and economy bans
POST /v1/player-security/batchVAC and ban signals for up to 100 Steam accounts

Request

Parameters of GET /v1/player-security, as published in the OpenAPI description.

ParameterRequiredAccepted valuesNotes
steam_idRequiredstringA 17-digit SteamID64. Profile URLs and vanity names are not accepted here.
include_detailsOptionalinteger (default 0)Adds nullable source-style ban_details from the same GetPlayerBans data; no additional Steam call.

Response fields

Fields of a 200 response. A type that includes null means Steam may not publish that value.

FieldTypeMeaning
steam_idstringThe SteamID64 the response describes.
bansobjectThe public ban signals. Every value is null when Steam did not return it.
bans.community_bannedboolean or nullWhether the account is banned from the Steam Community.
bans.vac_bannedboolean or nullWhether Steam reports a VAC ban on the account.
bans.vac_bansinteger or nullNumber of VAC bans on record.
bans.game_bansinteger or nullNumber of game bans on record.
bans.economy_banstring or nullSteam's economy ban state for trading and the Community Market.
bans.days_since_last_baninteger or nullDays since the most recent ban, as Steam reports them.
bans.last_ban_atstring or nullAlways null: Steam does not publish the exact time of a ban.
bans.last_ban_date_approxstring or nullApproximate date computed from days_since_last_ban.
trade_eligibilityobjectPublic ban signals only. complete is always false because Steam does not expose every temporary trade hold here.
trade_eligibility.statusstring: no_public_restrictions, restricted, unknownSummary of the public ban signals for trading.
trade_eligibility.reasonsarray of stringWhich signals led to that status.
trade_eligibility.basisstring: public_ban_signalsAlways public_ban_signals.
trade_eligibility.completebooleanAlways false: temporary trade holds are not visible in this data.
ban_detailsobject or nullAdded with include_details=1: the source-style fields from the same Steam response. It causes no additional Steam call.

What your code should handle

The cases that most often turn into wrong numbers in a product.

Unknown is not clean. A null value means Steam did not return that field. Show it as unknown, never as an account without bans.

Trade status is partial. trade_eligibility is built from public ban signals only. Its complete field is always false, because Steam does not expose every temporary trade hold.

Batch with SteamID64 strings. Send up to 100 IDs as strings. Duplicates are removed first, and each unique ID uses one quota unit, including cached results.

Free Steam ban checkerSteam profile APIError codes and retries

Status codes

Errors carry a typed code and, where it applies, Retry-After. Respect it on 429 and 503.

StatusMeaning
200OK
400Invalid request
401Missing or invalid API key
402Quota exhausted or required add-on is not active
403Resource is private or restricted; discord_required means free access requires current WOK Discord membership
422Query or JSON body validation failed
429Rate limit exceeded
502Upstream service failed
503Required upstream capability is unavailable; discord_unavailable means free membership verification should be retried

Related requests

The same key reads these. Batches use one quota unit per unique account or pair, including cached results.

POST /v1/player-security/batch

VAC and ban signals for up to 100 Steam accounts.

FieldRequiredAccepted valuesNotes
steamidsRequiredarray of string (1 to 100 entries)SteamID64 strings. Duplicates are removed while preserving first occurrence order.
include_detailsOptionalboolean (default False)Adds ban_details for each account.

Questions

Do I need a Valve Steam Web API key?

No. WOK holds the Steam Web API key on its servers and makes the Steam call for you. Your server sends a WOK key in the Authorization header.

Can I see why an account was banned, or in which game?

No. Steam publishes ban counts and the days since the last ban, not the reason or the game. WOK returns what Steam publishes and adds nothing to it.

Does it show trade holds and cooldowns?

Not fully. trade_eligibility reflects public ban signals; complete is always false because Steam does not expose every temporary trade hold through this data.

How many accounts can I check at once?

Up to 100 SteamID64 strings in POST /v1/player-security/batch. Each unique ID uses one quota unit, including cached results; sending one ID ten times costs one unit.

Steam friend listsSteam libraries and hoursSteam achievementsSteam level and badges