Profile

๐Ÿšฉ Score a Steam account for smurf / alternate-account risk

Baseurl: https://www.steamwebapi.com/steam/api/profile/risk?steam_id=76561198042843401&key=YOUR_API_KEY

๐Ÿ’ฌ **What this endpoint does:**
- Scores how likely a Steam account is a secondary ("smurf") account whose inventory was handed over from another account, rather than built up on its own.
- Answers the question anti-cheat, matchmaking and marketplace operators actually have: is this fresh-looking account really a fresh player?

๐Ÿ› ๏ธ **What you get:**
- `risk.score` (0-100) and `risk.level` (low / medium / high) as the overall assessment.
- `risk.smurf.detected` โ€” the boolean verdict, with its own score and level.
- `risk.smurf.confidence` (low / medium / high) โ€” how much is known about this account. A `detected: false` at `confidence: low` means "cannot tell", NOT "clean".
- Guaranteed: `level: high` only ever occurs together with `confidence: high`. A thin-evidence account is capped at `medium`, so acting automatically on `level: high` never acts on a guess.
- `risk.smurf.signals` โ€” stable signal codes that fired: `round_trip_partner` (something left this account and came back โ€” the strongest single indicator), `dominant_destination`, `bidirectional_partner`, `single_origin_dominant`, `bulk_acquisition_window`, `account_young_at_acquisition`, `origin_account_older`, `origin_account_inactive`, `limited_account_high_value` (a limited account โ€” one that never spent money on Steam โ€” holding a valuable inventory; supporting evidence only).
- `risk.smurf.since` โ€” the date the pattern starts, when one could be established.
- `risk.smurf.summary` โ€” a plain-language conclusion you can surface to staff.
- `risk.smurf.linkedaccounts` โ€” which accounts this one is linked to, strongest first. Per entry: `steamid`, a `profile` block with who that is (`personaname`, `avatar`, `avatarfull`, `timecreated`, `timecreatedat`, `loccountrycode`, `vac`, `tradeban`, `inventoryworthpricesteam`; null when the account is unknown to us), `matchscore` (0-100) and `matchlevel`, `share`, `direction` (incoming / outgoing / both), `roundtrip`, a `transfers` breakdown (received, sent, total, direct, viamarket), `firsttransfer` / `lasttransfer` / `windowdays`, and `reasons` โ€” the plain-language evidence each score is built from, including what argued against it (a counterpart that trades with many different accounts, or still holds a large inventory, is dampened towards 0 because that is what a dealer looks like, not a second account). Empty when nothing links this account to anyone.

๐ŸŒ **How to use:**
- Pass `steam_id` (SteamID64). Nothing else is required โ€” the assessment is resolved entirely server-side.
- Results are cached per account for several hours, so polling the same account is cheap for you and stable for your UI.
- Credits: 1 per call, regardless of how much history the account has or how many accounts fed into it. They count against the same Profile allowance as the other Profile endpoints.

โš ๏ธ **How to read the verdict:**
- This is a strong probabilistic indicator, not proof of identity, and must not be the sole basis for banning or rejecting a user.
- `risk` is a container: further risk types may be added alongside `smurf` later, so read it by key rather than by position.
get/steam/api/profile/risk

Request

  • Base URL: https://www.steamwebapi.com
  • URL: https://www.steamwebapi.com/steam/api/profile/risk
  • Auth: API key in query parameter key

Query parameters

Your API key for authentication. Retrieve it from your Dashboard (top-right corner).

steam_idstring required
Example:76561198042843401

Required. SteamID64 of the account to assess, for example 76561198042843401. Also accepted as id.

Response

Request was successful.

unknown required

Changes

No recorded changes to this operation across all 1 revision of this API.