SkinMarketCap API

Overview

CS2 skin prices and Steam inventory valuations from SkinMarketCap, over a REST API.

The SkinMarketCap API serves the market data behind skinmarketcap.app: the lowest price of every CS2 item across the marketplaces we track, the market as a whole with the SMC Index and the Fear & Greed score, Steam inventories priced item by item, the Steam profiles that own them with their game libraries, and players' CS2 stats from FACEIT, Leetify and Steam.

Base URL

https://api.skinmarketcap.app/v1

Authentication

Every request needs an API key in the x-api-key header. Create one on the Developers page of your account. The key is shown in full only once, so store it when it appears. Regenerating it revokes the old one.

curl https://api.skinmarketcap.app/v1/profiles/76561198210421051/inventory \
  -H "x-api-key: YOUR_API_KEY"

Authorization: Bearer YOUR_API_KEY works too, if your HTTP client prefers it.

Keep the key on your server. The API sends no CORS headers, so browsers block calls made from a web page.

Responses

Every response is JSON with camelCase fields. Prices are integer cents in USD, so 1250 means $12.50. The HTTP status tells a result from an error: a 2xx carries the result, anything else an error.

A single resource, such as one item or one profile, is the body itself:

{
  "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)",
  "itemSlug": "karambit-doppler-phase-4",
  "price": 119990,
  "listings": 69
}

A list carries its entries in data. A paged list also carries its position in pagination. Ask for the next page with ?page=, and change the page size with ?limit=:

{
  "data": [],
  "pagination": {
    "page": 1,
    "limit": 100,
    "total": 362,
    "totalPages": 4
  }
}

An error is marked by "error": true and carries a machine-readable code, a message and the requestId to quote when you contact us. A validation error (422) also lists each failed parameter in details:

{
  "error": true,
  "code": "API_KEY_INVALID",
  "message": "The API key is invalid or has been revoked.",
  "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d"
}

Limits and credits

Each plan has a per-minute request limit and a monthly credit quota. Every endpoint states what one call costs in credits. Only successful responses are charged, and a request refused by the per-minute limit costs nothing. On a paid plan, credits reset every month on the day of the month your plan started. On the Free plan they reset at 00:00 UTC on the first day of each month. X-Credits-Reset always says when. Your plan and the current month's usage are on the Developers page.

On a paid plan you can turn on extra usage on the Developers page. Once the month's credits run out, calls keep working and are paid from your account balance at your plan's price per 1,000 credits, listed on the API page. You can cap what extra usage spends in a month, and it resets with your credits. A call refused by the cap or by an empty balance costs nothing.

Some endpoints need a paid plan, and each one says which. Calling one your plan doesn't include returns a 403 with the code PLAN_UPGRADE_REQUIRED and costs nothing. The plans and what they include are on the API page. A paid plan that runs out without being renewed returns the account to Free, and the same key keeps working with Free limits.

Every response reports what is left:

HeaderMeaning
RateLimitRequests left in the current minute and seconds to reset
RateLimit-PolicyYour plan's requests per minute
X-Credits-LimitYour plan's monthly credits
X-Credits-RemainingCredits left in the current month
X-Credits-ResetSeconds until the credits reset
X-Credits-CostCredits this request cost
Retry-AfterSeconds to wait, sent with a 429

Errors

These codes can come from any endpoint. Each endpoint lists its own on top of them.

StatusCodeMeaning
401API_KEY_MISSINGNo key in the request
401API_KEY_INVALIDThe key is wrong or has been revoked
402INSUFFICIENT_BALANCEExtra usage is on and the balance can't pay for the call
404NOT_FOUNDNo endpoint or resource matches the path
422VALIDATION_ERRORA parameter is invalid, see details
429RATE_LIMITEDThe per-minute limit of your plan is used up
429MONTHLY_QUOTA_EXCEEDEDThe monthly credits of your plan are used up
429EXTRA_USAGE_LIMIT_REACHEDThis month's extra usage limit is reached

On this page