API Skins
JSONCS2 item API

Every CS2 item, described as JSON

What every skin, sticker, agent, charm and case is: weapon, wear and float range, StatTrak™ and Souvenir, rarity, collections, the cases it drops from and its picture. One record per market_hash_name, ready to filter.

Paid plans from $14.99 / 30 days · sign in with Steam

Live answer

Know what you are pricing.

This is what the API answers for these items. The same market_hash_name joins it to the price, buy order and sales APIs.

0

items, one record each

0

types, from skins to cases

0

filters you can combine

0

request for the whole catalog

Routes

One item, many, or every page

The same key and the same 30-day limit as the other APIs: one request, however many items its page holds.

One item

Everything about one item, by the name every marketplace uses.

GET /v1/items/{market_hash_name}

A batch

Repeat market_hash_name for several items, to describe a whole inventory at once.

GET /v1/items?market_hash_name=…

Every item

The whole catalog in one answer, or pages of it, filtered by type, weapon, collection, case, rarity and quality.

GET /v1/items?type=skin&weapon=awp

Five minutes to the first answer

Plain HTTP. No SDK to learn.

  1. 1Sign in with Steam and pick a paid plan.
  2. 2Copy your key from the API docs page.
  3. 3Send it in the X-API-KEY header and read the JSON.
type Item = {
    market_hash_name: string;
    name: string;
    type: "skin" | "sticker" | "agent" | "charm" | "patch" | "music_kit" | "graffiti" | "collectible" | "container";
    category: string | null;
    weapon: { id: string; name: string } | null;
    pattern: string | null;
    wear: { id: "fn" | "mw" | "ft" | "ww" | "bs"; name: string } | null;
    min_float: number | null;
    max_float: number | null;
    quality: "Normal" | "StatTrak™" | "Souvenir" | "★" | "★ StatTrak™";
    stattrak: boolean;
    souvenir: boolean;
    rarity: { id: string; name: string; color: string } | null;
    label: string | null;
    team: "both" | "ct" | "t" | null;
    collections: { id: string; name: string }[];
    containers: { id: string; name: string }[];
    details: Record<string, string>;
    image: string | null;
    url: string;
};

const API_KEY = process.env.APISKINS_API_KEY!;
const market_hash_name = "StatTrak™ AWP | Asiimov (Field-Tested)";

const response = await fetch(`https://api.apiskins.com/v1/items/${encodeURIComponent(market_hash_name)}`, {
    headers: { "X-API-KEY": API_KEY },
});

if (!response.ok) {
    throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}

const item: Item = await response.json();

Built with it

What people build on item data

Marketplaces and shops

Filters by weapon, wear, rarity and collection without keeping a catalog of your own.

Search and inventories

Turn a market_hash_name into a picture, a rarity colour and a float range in one request.

Trading bots

Trade only the kinds of items you want: no stickers, only knives, only one collection.

Fan sites and tools

Collection and case pages, trade-up calculators and loadout builders, from one source.

Limits

Included in every paid plan

Compare plans

Free

Free

  • 100 requests / 30 days
  • 60 requests / minute
  • Not included

Trader

$14.99 / 30 days

  • 5,000 requests / 30 days
  • 120 requests / minute
  • Included

Pro

$49.99 / 30 days

  • 25,000 requests / 30 days
  • 300 requests / minute
  • Included

Business

$119.99 / 30 days

  • 100,000 requests / 30 days
  • 300 requests / minute
  • Included

Questions

What people ask about the item API

Every CS2 item that trades: skins in every wear, StatTrak™ and Souvenir, knives and gloves, stickers, agents, charms, patches, music kits, graffiti, collectibles and cases, 34,937 records in all. New items are added when Valve releases them.
Yes, like prices, buy orders and sales: every answered request counts as one, however many items it holds, so the whole catalog in one answer is one request. See the plans on pricing.
Yes: every item has its own page under skins, with its float range, collections, cases and where it is cheapest right now.
No, it describes items. Prices come from the price API, buy orders from the buy order API and sales from the sales API, all joined by market_hash_name.

The whole catalog, on every paid plan.

Every item described, one key. The same key runs the price, buy order and sales APIs too.