Every CS2 item has a unique inspect link — a steam://rungame URL that opens an in-game preview when you click it. The format encodes enough information for Valve’s servers to look up the exact item (or, in the self-encoded variant, carries the item description in the URL itself). This guide covers the protocol, what decoders actually pull out of an inspect link, what gen codes are for, and how the pieces fit together when you’re trying to identify or replicate a specific skin.
Anatomy of an inspect link
A CS2 inspect link looks like one of three patterns:
steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S<steamid>A<assetid>D<verifyhash> steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M<listingid>A<assetid>D<verifyhash> steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20<hexpayload>
The leading 730 is the Steam app ID for Counter-Strike. The big number that follows (76561202255233023) is a fake "host" SteamID Valve uses purely for protocol routing — it isn’t tied to any real user. The interesting part is everything after the +csgo_econ_action_preview command, which comes in three flavours.
The three link types
1. Owner-bound (“S” links)
Format: S<steamid64>A<assetid>D<verifyhash>. The link points at a specific item in a specific player’s Steam inventory. To resolve it, Valve’s GC (Game Coordinator) looks up assetid X in player Y’s inventory and returns the item data. The D parameter is a verification hash that prevents you from guessing inventories that don’t exist — the GC rejects mismatched hashes.
These are what you get when you right-click a friend’s inventory item and copy the inspect link. They break if the owner trades the item away (the asset ID becomes invalid).
2. Market-bound (“M” links)
Format: M<listingid>A<assetid>D<verifyhash>. Points at an active Steam Market listing instead of a private inventory. These are what Steam Market exposes when you click "Inspect in game" on a listing page. They break the moment the listing sells or is delisted.
3. Self-encoded (hex payload)
Format: a long uppercase hex string after the command. The payload is a serialised CEconItemPreviewDataBlock protobuf containing every relevant field directly — paint kit, float, seed, stickers, keychain, custom name, low/high rank. No server round-trip needed; the CS2 client renders the preview from the payload alone.
Self-encoded links are what skin-changer plugins and gen-code generators emit. They’re also what a decoder shows you when you paste any S/M link — once Valve’s GC resolves the link, the response is the same protobuf, just delivered via the GC instead of inline.
What a decoder extracts
The protobuf carries roughly a dozen fields that the in-game renderer uses. The ones worth caring about for trading, pattern hunting, and lookup:
- paint_index — the finish ID. Each CS2 finish has a stable integer (AK-47 Redline = 282, AWP Asiimov = 279, M4A4 Howl = 309). Combined with the weapon defindex, this tells you exactly what skin it is.
- paint_wear — the float value, 0.00 to 1.00, that maps to a wear bucket (Factory New / Minimal Wear / Field-Tested / Well-Worn / Battle-Scarred). The exact decimal matters for high-tier FN items — a 0.001 Asiimov can trade for 3x what a 0.05 of the same skin does.
- paint_seed — the pattern index, 0 to 1000. This is what makes a Case Hardened blue gem, a Marble Fade FFI, a Crimson Web full web, or a Doppler a specific phase. The seed is the input to the deterministic shader that generates the pattern.
- stickers — an array of (sticker_id, slot, wear, scale, rotation) for each applied sticker. Wear is the scratch progress, 0.0 fresh through 1.0 fully scratched.
- keychain — CS2-only. (sticker_id, slot 0, wear unused, pattern). The 2024 keychain update added a new bottom-of-grip charm slot.
- customname — name tag string, if any. Free text, capped length.
- low_rank / high_rank — metadata Valve adds to certain rare items (medals, tournament drops). Surfaces things like "1 of 5" stickers.
Our decoder
The cs2apps.com/inspect/ decoder runs the official @csfloat/cs2-inspect-serializer protobuf library entirely in your browser. Paste any inspect link (S, M, or hex) and it extracts every field above. Zero API calls — the parse is fully local. Useful when you want to look up a pattern index without exposing the link to a third-party site.
For S and M links the decoder shows you the parsed owner/listing routing without resolving the actual item (resolution requires the Steam GC, which would mean an API call). Self-encoded hex links resolve fully locally.
Gen codes — what they are and aren’t
On community CS2 servers (often surf, KZ, retake, or DM servers) admins frequently install skin-changer plugins that let players preview or apply any skin to their inventory for that server session only. Real Steam inventory isn’t touched; the skin only renders on that server. Common plugins: WeaponPaints, AcsLoader, CS2 SkinChanger.
Each plugin takes a different chat-command syntax to apply a skin. WeaponPaints uses something like !ws ak 282 0.01 661 (weapon code, paint index, float, seed). AcsLoader uses !skin ak47 282 0.01 661. SkinChanger uses !apply weapon_ak47 282 0.01 661. A gen-code generator like ours produces all the variants in parallel so you can paste whichever the server expects.
Use cases
- Pattern hunting. Decode an inspect link to read the
paint_seedand cross-reference it against a pattern database. Is this Case Hardened a tier-1 blue gem? Which Marble Fade tier is this seed? - Float verification. Listed-for-sale floats sometimes don’t match the actual item — Steam Market shows the bucket but not the decimal. Decoding the inspect link before buying tells you the precise float you’d receive.
- Sticker rarity. Identify which stickers are applied at which slots and how scratched they are. Useful when buying for craft potential.
- Plugin server testing. Generate a gen code for an inspect link so you can preview an expensive skin on a community server without owning it.
What an inspect link can’t do
Inspect links are read-only. They can’t transfer ownership, trigger trades, log you into Steam, or do anything to your account. The steam:// protocol is a one-way command from your browser to your local Steam client — and the only command being issued is "render this item preview." Even sketchy-looking links are inert. Paste freely.
See also
- CS2 inspect-link decoder + gen-code generator — runs entirely in your browser.
- CS2 Skin Float and Wear, Explained — the float value the decoder shows you, demystified.
- Best Tools for CS2 Blue Gems and Pattern Hunting — where to take a seed once you’ve decoded it.
Found something wrong, biased, or out-of-date? Reach the editorial desk via the corrections process.