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.