JSON API

Free to use from any website or bot. No key needed. Every ID in a response is a string: SteamID64s are too big for a JavaScript number and would be rounded.

Limits per IP: 300 conversions, 30 lookups and 6 bulk requests a minute. Over a limit you get HTTP 429 with a Retry-After header in seconds.

Convert GET

https://steamid.projectgaming.gg/api/steamid/convert?q=STEAM_0:1:6172

All ID formats for any input, without asking Steam. A custom URL name can't be converted without Steam, so it returns "needs_lookup": true; use lookup for those.

{
  "query": "STEAM_0:1:6172",
  "results": [
    { "ids": {
        "steamid64": "76561197960278073",
        "steamid": "STEAM_0:1:6172",
        "steamid3": "[U:1:12345]",
        "account_id": "12345",
        "hex": "110000100003039",
        "fivem": "steam:110000100003039",
        "profile_url": "https://steamcommunity.com/profiles/76561197960278073"
    } }
  ],
  "needs_lookup": false
}

Lookup GET

https://steamid.projectgaming.gg/api/steamid/lookup?q=gabelogannewell

(Example values.)

Resolves custom URLs and adds the public profile, bans and Steam level. profile, bans and level are null when Steam doesn't answer (then steam_unavailable is true) or the profile hides them.

{
  "query": "gabelogannewell",
  "results": [
    { "ids": { "steamid64": "76561197960287930", "...": "..." },
      "profile": {
        "name": "Example Player", "avatar": "https://avatars.steamstatic.com/…_full.jpg",
        "profile_url": "https://steamcommunity.com/id/gabelogannewell/",
        "custom_url": "gabelogannewell", "visibility": "public",
        "status": "Offline", "online": false, "playing": null,
        "created": 1063407589, "created_age": "23 years, 1 month",
        "country": "US", "last_online": 1700000000
      },
      "bans": {
        "vac_banned": false, "vac_bans": 0, "game_bans": 0,
        "community_banned": false, "trade_ban": "none",
        "days_since_last_ban": null, "clean": true
      },
      "level": 25 }
  ],
  "steam_unavailable": false
}

A short number such as 12345 can be both an account ID and someone's custom URL; then results has both accounts.

Bulk POST

https://steamid.projectgaming.gg/api/steamid/bulk with a JSON body of up to 100 inputs:

curl -X POST https://steamid.projectgaming.gg/api/steamid/bulk \
  -H 'Content-Type: application/json' \
  -d '{"inputs": ["76561197960287930", "STEAM_0:1:6172", "gabelogannewell"]}'

Returns {"results": [...], "steam_unavailable": false}, one entry per input in order, each with query, steamid64, error, and (when it resolved) ids, profile and bans. At most 50 custom URL names are resolved per request.

Errors

Input that isn't a Steam ID or profile link returns 422; a custom URL no account uses returns 404. Both have an error message.