# Overview (/introduction) The SkinMarketCap API serves the market data behind [skinmarketcap.app](https://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 [#base-url] ```txt https://api.skinmarketcap.app/v1 ``` ## Authentication [#authentication] Every request needs an API key in the `x-api-key` header. Create one on the [Developers page](https://skinmarketcap.app/account/developers) of your account. The key is shown in full only once, so store it when it appears. Regenerating it revokes the old one. ```bash 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 [#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: ```json { "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=`: ```json { "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`: ```json { "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 [#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](https://skinmarketcap.app/account/developers). On a paid plan you can turn on extra usage on the [Developers page](https://skinmarketcap.app/account/developers). 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](https://skinmarketcap.app/api). 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](https://skinmarketcap.app/api). 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: | Header | Meaning | | --------------------- | -------------------------------------------------------- | | `RateLimit` | Requests left in the current minute and seconds to reset | | `RateLimit-Policy` | Your plan's requests per minute | | `X-Credits-Limit` | Your plan's monthly credits | | `X-Credits-Remaining` | Credits left in the current month | | `X-Credits-Reset` | Seconds until the credits reset | | `X-Credits-Cost` | Credits this request cost | | `Retry-After` | Seconds to wait, sent with a `429` | ## Errors [#errors] These codes can come from any endpoint. Each endpoint lists its own on top of them. | Status | Code | Meaning | | ------ | --------------------------- | -------------------------------------------------------- | | `401` | `API_KEY_MISSING` | No key in the request | | `401` | `API_KEY_INVALID` | The key is wrong or has been revoked | | `402` | `INSUFFICIENT_BALANCE` | Extra usage is on and the balance can't pay for the call | | `404` | `NOT_FOUND` | No endpoint or resource matches the path | | `422` | `VALIDATION_ERROR` | A parameter is invalid, see `details` | | `429` | `RATE_LIMITED` | The per-minute limit of your plan is used up | | `429` | `MONTHLY_QUOTA_EXCEEDED` | The monthly credits of your plan are used up | | `429` | `EXTRA_USAGE_LIMIT_REACHED` | This month's extra usage limit is reached | # List items (/api-reference/items/get-items) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get item (/api-reference/items/get-items-by-name) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get item price history (/api-reference/items/get-items-history) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List grouped items (/api-reference/items/get-items-grouped) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get grouped item (/api-reference/items/get-items-grouped-by-slug) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List marketplaces (/api-reference/marketplaces/get-marketplaces) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List deals (/api-reference/marketplaces/get-deals) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get market overview (/api-reference/market-overview/get-market-overview) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get SMC Index history (/api-reference/market-overview/get-market-overview-index-history) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get Fear & Greed history (/api-reference/market-overview/get-market-overview-sentiment-history) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get listings history (/api-reference/market-overview/get-market-overview-listings-history) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List collections (/api-reference/collections/get-collections) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get collection (/api-reference/collections/get-collections-by-slug) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List crates (/api-reference/collections/get-crates) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get crate (/api-reference/collections/get-crates-by-slug) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List top inventories (/api-reference/leaderboards/get-inventories-top) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List pro players (/api-reference/leaderboards/get-inventories-pros) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get profile (/api-reference/profiles/get-profile) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get inventory (/api-reference/profiles/get-profile-inventory) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List friends (/api-reference/profiles/get-profile-friends) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get CS2 stats (/api-reference/profiles/get-profile-stats) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # Get library summary (/api-reference/profiles/get-profile-library) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ``` # List library games (/api-reference/profiles/get-profile-library-games) ```json { "openapi": "3.2.0", "info": { "title": "SkinMarketCap API", "version": "1.0.0", "description": "CS2 skin prices, inventory valuations, Steam profiles and player stats from SkinMarketCap. Every request needs an API key in the `x-api-key` header, or as `Authorization: Bearer `. Prices are integer cents in USD. Each plan has a per-minute request limit and a monthly credit quota; every endpoint states its credit cost, and the `RateLimit` and `X-Credits-*` response headers report what is left." }, "servers": [ { "url": "https://api.skinmarketcap.app" } ], "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Items", "description": "The CS2 catalog with prices across marketplaces" }, { "name": "Marketplaces", "description": "The marketplaces SkinMarketCap tracks, and the deals between them" }, { "name": "Market Overview", "description": "The CS2 market as a whole: the SMC Index, Fear & Greed and listings" }, { "name": "Collections", "description": "CS2 collections, cases, capsules and souvenir packages, and what they hold" }, { "name": "Leaderboards", "description": "The top 100 Steam inventories and the pros' inventories" }, { "name": "Profiles", "description": "Steam accounts: identity, priced inventory, friends, CS2 stats and game library" } ], "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Item": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "name": { "type": [ "string", "null" ], "description": "The item's name without wear or quality" }, "itemSlug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "type": { "type": [ "string", "null" ], "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Factory New" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "price": { "type": [ "integer", "null" ], "description": "Lowest offer across the marketplaces, integer USD cents; null when nothing is listed" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across the marketplaces" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 24 hours, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 7 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move of the cheapest offer outside Steam over 30 days, which is `price` unless Steam undercuts every marketplace; null without a cash offer or a reliable baseline" }, "markets": { "type": "array", "items": { "$ref": "#/components/schemas/ItemMarket" }, "description": "Every marketplace listing it now, cheapest first" } }, "required": [ "marketHashName", "name", "itemSlug", "type", "weapon", "rarity", "exterior", "quality", "phase", "image", "collections", "crates", "price", "listings", "change24h", "change7d", "change30d", "markets" ] }, "CollectionRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/collections/{slug}` serves the collection", "example": "the-chroma-collection" }, "name": { "type": "string", "example": "The Chroma Collection" } }, "required": [ "slug", "name" ] }, "CrateRef": { "type": "object", "properties": { "slug": { "type": "string", "description": "`/v1/crates/{slug}` serves the crate", "example": "chroma-case" }, "name": { "type": "string", "example": "Chroma Case" } }, "required": [ "slug", "name" ] }, "ItemMarket": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ] }, "price": { "type": "integer", "description": "Lowest offer, integer USD cents" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale; null when the marketplace doesn't say" } }, "required": [ "marketplace", "price", "listings" ] }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "boolean", "enum": [ true ] }, "code": { "type": "string" }, "message": { "type": "string" }, "details": {}, "requestId": { "type": "string" } }, "required": [ "error", "code", "message" ] }, "PricePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "low": { "type": [ "integer", "null" ], "description": "Cheapest offer outside Steam that day, integer USD cents" }, "median": { "type": [ "integer", "null" ], "description": "Median of the marketplaces' cheapest offers outside Steam; steadier than `low` when one listing is mispriced, integer USD cents" }, "marketplaces": { "type": [ "integer", "null" ], "description": "Marketplaces outside Steam behind `low` and `median`" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on those marketplaces" }, "steamLow": { "type": [ "integer", "null" ], "description": "Steam's cheapest listing; null when Steam had none, and on days before Steam was tracked (2026-09-17), integer USD cents" } }, "required": [ "day", "low", "median", "marketplaces", "listings", "steamLow" ] }, "GroupedItem": { "type": "object", "properties": { "slug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{slug}", "example": "karambit-doppler-phase-4" }, "name": { "type": "string" }, "type": { "type": "string", "description": "Catalog kind: \"skin\", \"sticker\", \"crate\", \"keychain\", \"agent\", …" }, "weapon": { "type": [ "string", "null" ], "example": "Karambit" }, "image": { "type": [ "string", "null" ] }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…); each phase is its own item" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link; null for kinds CS2 can't preview" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across every wear and quality, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear, integer USD cents; null when nothing is listed" }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRef" } }, "crates": { "type": "array", "items": { "$ref": "#/components/schemas/CrateRef" }, "description": "Crates the item drops from" }, "qualities": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItemQuality" }, "description": "Price range per quality the item is listed in" }, "listings": { "type": "integer", "description": "Offers on sale across every wear and marketplace" }, "variantCount": { "type": "integer", "description": "Tradable versions: each wear, StatTrak™ and Souvenir counted apart" } }, "required": [ "slug", "name", "type", "weapon", "image", "rarity", "phase", "inspectLink", "minPrice", "maxPrice", "collections", "crates", "qualities", "listings", "variantCount" ] }, "GroupedItemQuality": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "minPrice": { "type": "integer", "description": "Cheapest offer across this quality's wears, integer USD cents" }, "maxPrice": { "type": "integer", "description": "Cheapest offer of this quality's priciest wear, integer USD cents" } }, "required": [ "quality", "minPrice", "maxPrice" ] }, "GroupedItemDetail": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Item" }, "description": "Every version on its own, as `/v1/items` lists it, by quality then wear" } }, "required": [ "items" ] } ] }, "Marketplaces": { "type": "object", "properties": { "totals": { "$ref": "#/components/schemas/MarketplacesTotals" }, "marketplaces": { "type": "array", "items": { "$ref": "#/components/schemas/Marketplace" } } }, "required": [ "totals", "marketplaces" ] }, "MarketplacesTotals": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Items at least one active marketplace prices, each counted once" }, "listings": { "type": "integer", "description": "Offers on sale across the marketplaces that say how many" }, "listedValue": { "type": "integer", "description": "The `listedValue` of every marketplace, summed, integer USD cents" } }, "required": [ "itemCount", "listings", "listedValue" ] }, "Marketplace": { "type": "object", "properties": { "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The id `markets[].marketplace` in `/v1/items` and the `marketplace` parameters use" }, "active": { "type": "boolean", "description": "Whether it has a price fresh enough to quote. False when its feed has gone quiet, and then `itemCount` is 0 and `listings` and `listedValue` are null" }, "itemCount": { "type": "integer", "description": "Items it prices now, one per Steam market hash name as `/v1/items` lists them" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale across those items; null when the marketplace doesn't say how many it has" }, "listedValue": { "type": [ "integer", "null" ], "description": "Each item's lowest offer times its listings, summed, integer USD cents: a floor, since every listing is priced at the cheapest one. Null wherever `listings` is" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When one of its prices was last updated; on an inactive one, when it went quiet" } }, "required": [ "marketplace", "active", "itemCount", "listings", "listedValue", "updatedAt" ] }, "MarketOverview": { "type": "object", "properties": { "updatedAt": { "type": "string", "format": "date-time", "description": "When these figures were last computed; they refresh every five minutes" }, "listed": { "type": "object", "properties": { "value": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed: a floor. Steam is left out, as in `/v1/marketplaces` totals, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of `value` against the day before, over the marketplaces reporting both days; null without the day before" }, "listings": { "type": "integer", "description": "Offers on sale behind `value`" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price, Steam included: the ones `/v1/marketplaces` lists as `active`" } }, "required": [ "value", "change24h", "listings", "marketplaces" ] }, "index": { "$ref": "#/components/schemas/MarketIndex" }, "segments": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSegment" }, "description": "The SMC Index of each segment, live; a variant falls in one segment at most" }, "breadth": { "type": "object", "properties": { "day": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 24 hours" }, "week": { "type": "object", "properties": { "up": { "type": "integer" }, "down": { "type": "integer" }, "flat": { "type": "integer" } }, "required": [ "up", "down", "flat" ], "description": "Over 7 days" } }, "required": [ "day", "week" ], "description": "How many of the index's variants rose, fell or held" }, "netListings": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer" } }, "required": [ "day", "value" ], "description": "Listings added minus removed between the last two snapshot days, over the cash marketplaces reporting both; null before the second snapshot day" }, "dominance": { "type": "array", "items": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container", "other" ] }, "value": { "type": "integer", "description": "The segment's share of `listed.value`, integer USD cents" }, "share": { "type": "number", "description": "Percent of `listed.value`" } }, "required": [ "segment", "value", "share" ] }, "description": "`listed.value` split by segment, largest first, with the rest as `other`" }, "sentiment": { "$ref": "#/components/schemas/MarketSentiment" } }, "required": [ "updatedAt", "listed", "index", "segments", "breadth", "netListings", "dominance", "sentiment" ] }, "MarketIndex": { "type": "object", "properties": { "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ], "description": "The SMC Index of the whole market, live" }, "MarketSegment": { "type": "object", "properties": { "segment": { "type": "string", "enum": [ "knife", "gloves", "rifle", "pistol", "container" ], "description": "Named like the `category` filter of `/v1/items` that holds the same items" }, "value": { "type": "integer", "description": "The cheapest cash price of every variant (each wear, StatTrak™ and Souvenir level) that two or more marketplaces price, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `value`" }, "change24h": { "type": [ "number", "null" ], "description": "Percent move over 24 hours, over the variants priced at both ends, so a variant joining or leaving never reads as a move; null without a baseline" }, "change7d": { "type": [ "number", "null" ], "description": "Percent move over 7 days, the same way" }, "change30d": { "type": [ "number", "null" ], "description": "Percent move over 30 days, the same way" }, "volatility30d": { "type": [ "number", "null" ], "description": "Annualised standard deviation of the daily moves over the last 30 days, percent; null under a week of moves" } }, "required": [ "segment", "value", "variants", "change24h", "change7d", "change30d", "volatility30d" ] }, "MarketSentiment": { "type": [ "object", "null" ], "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "previousScore": { "type": [ "integer", "null" ], "description": "The day before's score; null on the first scored day" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite", "previousScore" ], "description": "The latest Fear & Greed score; null until a month of history exists" }, "MarketIndexDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "total": { "type": "integer", "description": "The index that day: its variants' cheapest cash prices, summed, integer USD cents" }, "variants": { "type": "integer", "description": "Variants in `total`" }, "change": { "type": [ "number", "null" ], "description": "Percent move since the snapshot day before, over the variants priced on both days; null on the first day and when a feed outage left under half of them comparable" }, "compared": { "type": "integer", "description": "Variants `change` was taken over" }, "advancers": { "type": "integer", "description": "Of those, how many rose" }, "decliners": { "type": "integer", "description": "Of those, how many fell" } }, "required": [ "day", "total", "variants", "change", "compared", "advancers", "decliners" ] }, "MarketSentimentDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "score": { "type": "integer", "description": "Fear & Greed, 0 (extreme fear) to 100 (extreme greed): the weighted mean of the parts with enough history" }, "label": { "type": "string", "enum": [ "extremeFear", "fear", "neutral", "greed", "extremeGreed" ], "description": "The score's band: extremeFear up to 24, fear up to 44, neutral up to 55, greed up to 75, extremeGreed up to 100" }, "momentum": { "type": [ "integer", "null" ], "description": "The SMC Index against its 30-day average, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "volatility": { "type": [ "integer", "null" ], "description": "The index's daily moves over 30 days, where calmer ranks higher, ranked 0-100 against its own past year on the score's scale, 20% of the score; null with under 30 days of history" }, "breadth": { "type": [ "integer", "null" ], "description": "The share of rising variants among those that moved, 7 days, ranked 0-100 against its own past year on the score's scale, 25% of the score; null with under 30 days of history" }, "supply": { "type": [ "integer", "null" ], "description": "The change in listings over 7 days, where fewer listings rank higher, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" }, "riskAppetite": { "type": [ "integer", "null" ], "description": "How far Knives and Gloves outran the whole market over 30 days, ranked 0-100 against its own past year on the score's scale, 15% of the score; null with under 30 days of history" } }, "required": [ "day", "score", "label", "momentum", "volatility", "breadth", "supply", "riskAppetite" ] }, "MarketListingsDay": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "listedValue": { "type": "integer", "description": "Every listing on a cash marketplace at that marketplace's cheapest price for the variant, summed over the marketplaces reporting that day, integer USD cents" }, "listings": { "type": "integer", "description": "Offers on sale behind `listedValue`" }, "netListings": { "type": [ "integer", "null" ], "description": "Listings added minus removed since the snapshot day before, over the marketplaces reporting both; null on the first day" }, "marketplaces": { "type": "integer", "description": "Marketplaces with a live price that day, Steam included" } }, "required": [ "day", "listedValue", "listings", "netListings", "marketplaces" ] }, "Deal": { "type": "object", "properties": { "marketHashName": { "type": "string", "example": "★ Bayonet | Doppler (Minimal Wear)" }, "name": { "type": "string", "description": "The item's name without wear or quality" }, "itemSlug": { "type": "string", "description": "The item's page is https://skinmarketcap.app/item/{itemSlug}" }, "weapon": { "type": [ "string", "null" ], "example": "Bayonet" }, "rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" } }, "required": [ "name", "color" ] }, "exterior": { "type": [ "string", "null" ], "example": "Minimal Wear" }, "quality": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase (\"Phase 4\", \"Ruby\"…)" }, "image": { "type": [ "string", "null" ] }, "price": { "type": "integer", "description": "Cheapest offer outside Steam and `reference`, integer USD cents. It can differ from `price` in `/v1/items`, which counts every marketplace" }, "marketplace": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace making that offer" }, "listings": { "type": [ "integer", "null" ], "description": "Offers on sale on that marketplace; null when it doesn't say" }, "reference": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "The marketplace the deal is measured against" }, "referencePrice": { "type": "integer", "description": "Its lowest offer, integer USD cents" }, "discount": { "type": "number", "description": "How far `price` is under `referencePrice`, percent with two decimals" }, "difference": { "type": "integer", "description": "`referencePrice` − `price`, integer USD cents. Against Steam this is not a profit: a Steam sale pays out wallet funds, after Steam's fees" } }, "required": [ "marketHashName", "name", "itemSlug", "weapon", "rarity", "exterior", "quality", "phase", "image", "price", "marketplace", "listings", "reference", "referencePrice", "discount", "difference" ] }, "Collection": { "type": "object", "properties": { "slug": { "type": "string", "description": "The collection's page is https://skinmarketcap.app/collection/{slug}", "example": "the-2021-train-collection" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "Release day, YYYY-MM-DD" }, "itemCount": { "type": "integer", "description": "Items in the collection" }, "minPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer across its items, integer USD cents; null when nothing is listed" }, "maxPrice": { "type": [ "integer", "null" ], "description": "Cheapest offer of the priciest wear of any of its items, integer USD cents; null when nothing is listed" }, "rarities": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionRarity" }, "description": "Items per grade, the most common first. Items with no grade are left out, so the counts can add up to less than `itemCount`" } }, "required": [ "slug", "name", "image", "releaseDate", "itemCount", "minPrice", "maxPrice", "rarities" ] }, "CollectionRarity": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade" }, "count": { "type": "integer", "description": "Items of this grade in the collection" } }, "required": [ "name", "color", "count" ] }, "CollectionDetail": { "allOf": [ { "$ref": "#/components/schemas/Collection" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" }, "description": "Every item in the collection as `/v1/grouped-items` lists it, by name" } }, "required": [ "items" ] } ] }, "Crate": { "type": "object", "properties": { "slug": { "type": "string", "description": "The crate's page is https://skinmarketcap.app/cases/{slug}. A crate is also an item: `/v1/grouped-items/{slug}` has its prices on every marketplace", "example": "chroma-case" }, "name": { "type": "string" }, "image": { "type": [ "string", "null" ] }, "kind": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "`other` holds the crates the game leaves untyped, and any kind it adds later" }, "releaseDate": { "type": [ "string", "null" ], "format": "date", "description": "First day on sale, YYYY-MM-DD; null for most souvenir packages" }, "itemCount": { "type": "integer", "description": "Items it can drop, the rare special items included" }, "price": { "type": [ "integer", "null" ], "description": "Cheapest offer for the crate, integer USD cents; null when nothing is listed" }, "listings": { "type": "integer", "description": "Offers for the crate on sale across the marketplaces" } }, "required": [ "slug", "name", "image", "kind", "releaseDate", "itemCount", "price", "listings" ] }, "CrateDetail": { "allOf": [ { "$ref": "#/components/schemas/Crate" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CrateItem" }, "description": "Everything it can drop, each as `/v1/grouped-items` lists it: the ordinary drops in the game's order, then the rare special items" } }, "required": [ "items" ] } ] }, "CrateItem": { "allOf": [ { "$ref": "#/components/schemas/GroupedItem" }, { "type": "object", "properties": { "rare": { "type": "boolean", "description": "One of the rare special items (knives, gloves) rather than the ordinary drops" } }, "required": [ "rare" ] } ] }, "TopInventory": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position on the board, from 1" }, "previousRank": { "type": [ "integer", "null" ], "description": "The position before the last refresh that moved it; null when it has never moved" }, "isNew": { "type": "boolean", "description": "Whether it joined the board in the last 7 days" }, "steamId": { "type": "string", "description": "The owner's SteamID64" }, "personaName": { "type": "string", "description": "The owner's display name when last valued" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": "integer", "description": "What the inventory was worth when last valued, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the inventory was last valued" } }, "required": [ "rank", "previousRank", "isNew", "steamId", "personaName", "avatar", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "InventoryValuePoint": { "type": "object", "properties": { "day": { "type": "string", "format": "date", "description": "UTC calendar day, YYYY-MM-DD" }, "value": { "type": "integer", "description": "What the inventory's current items were worth, integer USD cents" } }, "required": [ "day", "value" ] }, "ProPlayer": { "type": "object", "properties": { "rank": { "type": "integer", "description": "Position under `sort`, from 1" }, "steamId": { "type": "string", "description": "The player's SteamID64" }, "nickname": { "type": "string", "description": "The name they play under, as Valve spells it" }, "realName": { "type": [ "string", "null" ], "description": "Their real name; null when we don't have it" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country Valve lists them under; null when it lists none" }, "teamTag": { "type": [ "string", "null" ], "description": "Their team's tag at the most recent Major they played; null when unknown" }, "majorCount": { "type": "integer", "description": "Majors they have played" }, "photo": { "type": [ "string", "null" ], "description": "Official portrait URL, never the player's Steam avatar; null when we have none" }, "personaName": { "type": [ "string", "null" ], "description": "Steam display name; null when the inventory is private or not valued yet" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "totalValue": { "type": [ "integer", "null" ], "description": "What the inventory was worth when last valued, integer USD cents; null when the inventory is private or not valued yet" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 24 hours: the last point of `history` against the latest one at least 24 hours before it, two decimals. Null when `history` doesn't reach back that far" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 7 days: the last point of `history` against the latest one at least 7 days before it, two decimals. Null when `history` doesn't reach back that far" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the inventory's value over 30 days: the last point of `history` against the latest one at least 30 days before it, two decimals. Null when `history` doesn't reach back that far" }, "itemCount": { "type": [ "integer", "null" ], "description": "Total copies; null when the inventory is private or not valued yet" }, "uniqueCount": { "type": [ "integer", "null" ], "description": "Distinct market hash names; null when the inventory is private or not valued yet" }, "valuedCount": { "type": [ "integer", "null" ], "description": "Distinct items with a price; null when the inventory is private or not valued yet" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over the last 30 days and today, one point per day, oldest first. Its current items are re-priced at each day's prices, so items bought or sold during the month don't show. The last point is today at live prices, while `totalValue` is from the last valuation. A missing day is one no price snapshot was taken for. Updated about hourly; empty when we hold no item list for the profile" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the inventory was last valued; null when the inventory is private or not valued yet" } }, "required": [ "rank", "steamId", "nickname", "realName", "countryCode", "teamTag", "majorCount", "photo", "personaName", "profileUrl", "totalValue", "change24h", "change7d", "change30d", "itemCount", "uniqueCount", "valuedCount", "history", "updatedAt" ] }, "Profile": { "type": "object", "properties": { "steamId": { "type": "string", "description": "SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Full-size avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the profile is public. A public profile can still hide its inventory, game details or friends list." }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "US" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the account was created; null when the profile is private" }, "steamLevel": { "type": [ "integer", "null" ], "description": "null when the profile is private" }, "gameCount": { "type": [ "integer", "null" ], "description": "Games in the library, counting the free-to-play games the player has launched; null when game details are private" }, "playtime": { "$ref": "#/components/schemas/ProfilePlaytime" }, "friendCount": { "type": [ "integer", "null" ], "description": "null when the friends list is private" }, "bans": { "$ref": "#/components/schemas/ProfileBans" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "createdAt", "steamLevel", "gameCount", "playtime", "friendCount", "bans" ] }, "ProfilePlaytime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer", "description": "Lifetime playtime across every game in the library, minutes" }, "cs2Minutes": { "type": "integer", "description": "Lifetime CS2 playtime, minutes; 0 when never played" } }, "required": [ "totalMinutes", "cs2Minutes" ], "description": "null when game details or total playtime are private" }, "ProfileBans": { "type": "object", "properties": { "vacBans": { "type": "integer", "description": "VAC bans on record" }, "gameBans": { "type": "integer", "description": "Game bans on record" }, "communityBanned": { "type": "boolean", "description": "Banned from the Steam Community" }, "economyBan": { "type": "string", "enum": [ "none", "probation", "banned" ], "description": "Trade (economy) ban state" }, "daysSinceLastBan": { "type": "integer", "description": "Days since the most recent ban; 0 when never banned" } }, "required": [ "vacBans", "gameBans", "communityBanned", "economyBan", "daysSinceLastBan" ], "description": "Always present, whatever the profile's privacy" }, "Inventory": { "type": "object", "properties": { "itemCount": { "type": "integer", "description": "Total copies" }, "uniqueCount": { "type": "integer", "description": "Distinct market hash names" }, "valuedCount": { "type": "integer", "description": "Distinct items with a price" }, "totalValue": { "type": "integer", "description": "Sum of price × count, integer USD cents" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryValuePoint" }, "description": "The inventory's value over time, one point per day, oldest first. Today's items are re-priced at each day's prices, so items bought or sold during the range don't show. The last point is today at live prices and equals totalValue; empty when nothing is priced." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/InventoryItem" }, "description": "Most valuable first" } }, "required": [ "itemCount", "uniqueCount", "valuedCount", "totalValue", "history", "items" ] }, "InventoryItem": { "type": "object", "properties": { "assetId": { "type": [ "string", "null" ], "description": "Steam asset id" }, "marketHashName": { "type": "string", "example": "AK-47 | Redline (Field-Tested)" }, "name": { "type": "string" }, "image": { "type": "string" }, "exterior": { "type": [ "string", "null" ], "example": "Field-Tested" }, "category": { "type": [ "string", "null" ], "example": "Rifle" }, "rarity": { "$ref": "#/components/schemas/Rarity" }, "tradable": { "type": "boolean" }, "marketable": { "type": "boolean" }, "count": { "type": "integer", "description": "Copies this row stands for" }, "float": { "type": [ "number", "null" ], "description": "Float value from 0 to 1" }, "paintSeed": { "type": [ "integer", "null" ] }, "phase": { "type": [ "string", "null" ], "description": "Doppler phase", "example": "Phase 2" }, "inspectLink": { "type": [ "string", "null" ], "description": "`steam://` Inspect in Game link" }, "stickers": { "type": "array", "items": { "$ref": "#/components/schemas/Sticker" } }, "charm": { "$ref": "#/components/schemas/Charm" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price across marketplaces for one copy; null when unpriced, integer USD cents" }, "change24h": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 24 hours; null without a cash offer or a price history" }, "change7d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 7 days; null without a cash offer or a price history" }, "change30d": { "type": [ "number", "null" ], "description": "Percent change of the item's cheapest offer outside Steam over 30 days; null without a cash offer or a price history" }, "slug": { "type": [ "string", "null" ], "description": "The item's page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "assetId", "marketHashName", "name", "image", "exterior", "category", "rarity", "tradable", "marketable", "count", "float", "paintSeed", "phase", "inspectLink", "stickers", "charm", "price", "change24h", "change7d", "change30d", "slug" ] }, "Rarity": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "color": { "type": [ "string", "null" ], "description": "Hex color of the grade, e.g. #eb4b4b" } }, "required": [ "name", "color" ] }, "Sticker": { "type": "object", "properties": { "name": { "type": "string", "example": "Sticker | jks (Gold) | Berlin 2019" }, "image": { "type": "string" }, "wear": { "type": [ "number", "null" ], "description": "Scrape level from 0 (pristine) to 1; null when unknown" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the sticker itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "wear", "price", "slug" ] }, "Charm": { "type": [ "object", "null" ], "properties": { "name": { "type": "string", "example": "Charm | Hot Howl" }, "image": { "type": "string" }, "price": { "type": [ "integer", "null" ], "description": "Lowest price of the charm itself; null when unpriced, integer USD cents" }, "slug": { "type": [ "string", "null" ], "description": "Its page is https://skinmarketcap.app/item/{slug}; null when unmatched" } }, "required": [ "name", "image", "price", "slug" ] }, "Friend": { "type": "object", "properties": { "steamId": { "type": "string", "description": "The friend's SteamID64" }, "personaName": { "type": "string", "description": "Current display name" }, "avatar": { "type": "string", "description": "Medium (64×64) avatar URL" }, "profileUrl": { "type": "string", "description": "Steam Community profile URL" }, "isPublic": { "type": "boolean", "description": "Whether the friend's profile is public" }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country set on the profile; null when unset or the profile is private", "example": "DK" }, "friendSince": { "type": "string", "format": "date-time", "description": "When the two became friends" } }, "required": [ "steamId", "personaName", "avatar", "profileUrl", "isPublic", "countryCode", "friendSince" ] }, "Stats": { "type": "object", "properties": { "faceit": { "$ref": "#/components/schemas/Faceit" }, "matchmaking": { "$ref": "#/components/schemas/Matchmaking" }, "leetify": { "$ref": "#/components/schemas/Leetify" }, "steam": { "$ref": "#/components/schemas/SteamCareer" } }, "required": [ "faceit", "matchmaking", "leetify", "steam" ] }, "Faceit": { "type": [ "object", "null" ], "properties": { "playerId": { "type": "string", "description": "FACEIT player id" }, "nickname": { "type": "string" }, "url": { "type": "string", "description": "FACEIT profile URL" }, "avatar": { "type": [ "string", "null" ] }, "countryCode": { "type": [ "string", "null" ], "description": "ISO 3166-1 alpha-2 country on the FACEIT profile; null when unset", "example": "EE" }, "createdAt": { "type": [ "string", "null" ], "description": "When the FACEIT account was created" }, "game": { "type": "string", "enum": [ "cs2", "csgo" ], "description": "The game `level`, `elo` and `stats` are for: CS2, or CS:GO when the player has no CS2 data" }, "level": { "type": [ "integer", "null" ], "description": "Skill level, 1–10" }, "elo": { "type": [ "integer", "null" ] }, "stats": { "$ref": "#/components/schemas/FaceitStats" } }, "required": [ "playerId", "nickname", "url", "avatar", "countryCode", "createdAt", "game", "level", "elo", "stats" ], "description": "null when the player has no FACEIT account" }, "FaceitStats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round; null for CS:GO, which has no extended stats" }, "utilityDamagePerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "clutch1v1WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "clutch1v2WinRate": { "type": [ "number", "null" ], "description": "Percent (0–100); null for CS:GO" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss" ] }, "description": "Latest five matches, newest first" }, "longestWinStreak": { "type": "integer" }, "currentWinStreak": { "type": "integer" }, "entryRate": { "type": [ "number", "null" ], "description": "Rounds the player took the opening duel, percent (0–100); null for CS:GO" }, "entrySuccessRate": { "type": [ "number", "null" ], "description": "Opening duels won, percent (0–100); null for CS:GO" }, "flashSuccessRate": { "type": [ "number", "null" ], "description": "Flashes that blinded an enemy, percent (0–100); null for CS:GO" }, "enemiesFlashedPerRound": { "type": [ "number", "null" ], "description": "null for CS:GO" }, "sniperKillRate": { "type": [ "number", "null" ], "description": "Kills with a sniper rifle, percent (0–100); null for CS:GO" }, "maps": { "type": "array", "items": { "$ref": "#/components/schemas/FaceitMap" }, "description": "5v5 maps, most played first" } }, "required": [ "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr", "utilityDamagePerRound", "clutch1v1WinRate", "clutch1v2WinRate", "recentResults", "longestWinStreak", "currentWinStreak", "entryRate", "entrySuccessRate", "flashSuccessRate", "enemiesFlashedPerRound", "sniperKillRate", "maps" ], "description": "Lifetime stats; null when the player has none for `game`" }, "FaceitMap": { "type": "object", "properties": { "map": { "type": "string", "example": "de_ancient" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "kdRatio": { "type": "number", "description": "Average K/D ratio" }, "headshotPercent": { "type": "number", "description": "Average headshot kills, percent (0–100)" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "map", "matches", "wins", "winRate", "kdRatio", "headshotPercent", "adr" ] }, "Matchmaking": { "type": [ "object", "null" ], "properties": { "premier": { "$ref": "#/components/schemas/Premier" }, "wingmanRank": { "type": [ "integer", "null" ], "description": "Wingman skill group, 1–18; null when unranked" }, "competitiveRanks": { "type": "array", "items": { "type": "object", "properties": { "map": { "type": "string" }, "rank": { "type": "integer" } }, "required": [ "map", "rank" ] }, "description": "Competitive skill group (1–18) per ranked map, best first" } }, "required": [ "premier", "wingmanRank", "competitiveRanks" ], "description": "Valve's own ranks: Premier, Wingman and Competitive. Valve publishes no API for them, so they are read through Leetify; null when the player hasn't signed up on Leetify" }, "Premier": { "type": "object", "properties": { "rating": { "type": [ "integer", "null" ], "description": "Current CS Rating; null when unranked" }, "recentResults": { "type": "array", "items": { "type": "string", "enum": [ "win", "loss", "tie" ] }, "description": "Latest five Premier matches, newest first" }, "stats": { "type": [ "object", "null" ], "properties": { "matches": { "type": "integer", "description": "Recent Premier matches these cover" }, "wins": { "type": "integer" }, "winRate": { "type": "number", "description": "Wins / matches, percent (0–100)" }, "peakRating": { "type": [ "integer", "null" ], "description": "Highest CS Rating seen" }, "kdRatio": { "type": [ "number", "null" ] }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "adr": { "type": [ "number", "null" ], "description": "Average damage per round" } }, "required": [ "matches", "wins", "winRate", "peakRating", "kdRatio", "headshotPercent", "adr" ], "description": "Over the recent Premier matches; null when there are none" } }, "required": [ "rating", "recentResults", "stats" ] }, "Leetify": { "type": [ "object", "null" ], "properties": { "url": { "type": "string", "description": "The player's Leetify profile, for the attribution link" }, "winRate": { "type": [ "number", "null" ], "description": "Win rate over the last 30 matches, every mode Leetify tracks, percent (0–100); null when unknown" }, "totalMatches": { "type": [ "integer", "null" ], "description": "Every match Leetify has recorded, all modes" }, "skills": { "type": "object", "properties": { "aim": { "type": [ "number", "null" ], "description": "0–100" }, "positioning": { "type": [ "number", "null" ], "description": "0–100" }, "utility": { "type": [ "number", "null" ], "description": "0–100" }, "opening": { "type": [ "number", "null" ], "description": "Leetify display units" }, "clutch": { "type": [ "number", "null" ], "description": "Leetify display units" } }, "required": [ "aim", "positioning", "utility", "opening", "clutch" ], "description": "Leetify's skill scores over the last 30 matches; null when there is too little data" }, "ratings": { "type": "object", "properties": { "leetify": { "type": [ "number", "null" ] }, "ct": { "type": [ "number", "null" ] }, "t": { "type": [ "number", "null" ] } }, "required": [ "leetify", "ct", "t" ], "description": "Leetify Rating overall and per side over the last 30 matches, in Leetify display units" }, "aimStats": { "type": "object", "properties": { "hsAccuracy": { "type": [ "number", "null" ], "description": "Headshot accuracy, percent (0–100); null when unknown" }, "crosshairPlacement": { "type": [ "number", "null" ], "description": "Pre-aim error in degrees, lower is better" }, "reactionTimeMs": { "type": [ "number", "null" ], "description": "Lower is better" }, "sprayAccuracy": { "type": [ "number", "null" ], "description": "Spray accuracy, percent (0–100); null when unknown" }, "counterStrafing": { "type": [ "number", "null" ], "description": "Counter-strafed shots, percent (0–100); null when unknown" }, "spottedAccuracy": { "type": [ "number", "null" ], "description": "Accuracy with an enemy spotted, percent (0–100); null when unknown" } }, "required": [ "hsAccuracy", "crosshairPlacement", "reactionTimeMs", "sprayAccuracy", "counterStrafing", "spottedAccuracy" ], "description": "Leetify's aim analytics over the last 30 matches" }, "heDamage": { "type": "object", "properties": { "enemies": { "type": [ "number", "null" ], "description": "Average HE damage to enemies" }, "team": { "type": [ "number", "null" ], "description": "Average HE damage to teammates" } }, "required": [ "enemies", "team" ], "description": "HE grenade damage averages over the last 30 matches" }, "openingDuels": { "type": "object", "properties": { "ctSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on CT, percent (0–100); null when unknown" }, "tSuccess": { "type": [ "number", "null" ], "description": "Opening duels won on T, percent (0–100); null when unknown" }, "ctAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on CT, percent (0–100); null when unknown" }, "tAggressionSuccess": { "type": [ "number", "null" ], "description": "Opening aggression success on T, percent (0–100); null when unknown" } }, "required": [ "ctSuccess", "tSuccess", "ctAggressionSuccess", "tAggressionSuccess" ], "description": "Opening duels over the last 30 matches" }, "trading": { "type": "object", "properties": { "tradeKillSuccess": { "type": [ "number", "null" ], "description": "Trade kills landed, percent (0–100); null when unknown" }, "tradedDeathSuccess": { "type": [ "number", "null" ], "description": "Deaths a teammate traded, percent (0–100); null when unknown" }, "opportunitiesPerRound": { "type": [ "number", "null" ], "description": "Trade chances" } }, "required": [ "tradeKillSuccess", "tradedDeathSuccess", "opportunitiesPerRound" ], "description": "Trading over the last 30 matches" }, "flashbangs": { "type": "object", "properties": { "thrown": { "type": [ "number", "null" ], "description": "Average per match" }, "hitFoePerFlashbang": { "type": [ "number", "null" ], "description": "Enemies blinded per flashbang" }, "hitFriendPerFlashbang": { "type": [ "number", "null" ], "description": "Teammates blinded per flashbang" }, "foeBlindDuration": { "type": [ "number", "null" ], "description": "Average seconds an enemy stays blind" }, "leadingToKill": { "type": [ "number", "null" ], "description": "Flashbangs that led to a kill, percent (0–100); null when unknown" } }, "required": [ "thrown", "hitFoePerFlashbang", "hitFriendPerFlashbang", "foeBlindDuration", "leadingToKill" ], "description": "Flashbangs over the last 30 matches" }, "utilityOnDeath": { "type": [ "number", "null" ], "description": "Average value of the utility still held when dying, in-game dollars, over the last 30 matches" } }, "required": [ "url", "winRate", "totalMatches", "skills", "ratings", "aimStats", "heDamage", "openingDuels", "trading", "flashbangs", "utilityOnDeath" ], "description": "Leetify's analysis; win rate, skills, ratings, aim stats and HE damage cover the last 30 matches. null when the player hasn't signed up on Leetify. Show it with \"Data provided by Leetify\" and a link to `url`" }, "SteamCareer": { "type": [ "object", "null" ], "properties": { "kills": { "type": "integer" }, "deaths": { "type": "integer" }, "kdRatio": { "type": "number" }, "rounds": { "type": "integer" }, "matches": { "type": "integer" }, "wins": { "type": "integer" }, "winRate": { "type": [ "number", "null" ], "description": "Wins / matches, percent (0–100); null when unknown" }, "headshotPercent": { "type": [ "number", "null" ], "description": "Headshot kills / kills, percent (0–100); null when unknown" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" }, "playtimeHours": { "type": [ "integer", "null" ], "description": "Hours in matches" }, "mvps": { "type": [ "integer", "null" ], "description": "null when Valve doesn't report it" }, "bombsPlanted": { "type": "integer" }, "bombsDefused": { "type": "integer" }, "knifeKills": { "type": "integer" }, "favoriteWeapon": { "type": [ "object", "null" ], "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" } }, "required": [ "weapon", "kills" ], "description": "The gun with the most kills" }, "weapons": { "type": "array", "items": { "type": "object", "properties": { "weapon": { "type": "string", "example": "ak47" }, "kills": { "type": "integer" }, "accuracy": { "type": [ "number", "null" ], "description": "Shots hit / shots fired, percent (0–100); null when unknown" } }, "required": [ "weapon", "kills", "accuracy" ] }, "description": "Guns with at least one kill, most kills first" }, "bestMap": { "type": [ "object", "null" ], "properties": { "map": { "type": "string", "example": "de_dust2" }, "wins": { "type": "integer" } }, "required": [ "map", "wins" ], "description": "The map with the most wins" } }, "required": [ "kills", "deaths", "kdRatio", "rounds", "matches", "wins", "winRate", "headshotPercent", "accuracy", "playtimeHours", "mvps", "bombsPlanted", "bombsDefused", "knifeKills", "favoriteWeapon", "weapons", "bestMap" ], "description": "Lifetime totals from Steam, across CS:GO and CS2 and every mode, so not comparable to competitive stats; null when the player keeps game details private" }, "LibrarySummary": { "type": "object", "properties": { "gameCount": { "type": "integer" }, "totalValue": { "type": "integer", "description": "Regular store prices of the paid games still sold, integer USD cents" }, "notOnStoreCount": { "type": "integer", "description": "Paid games the store no longer sells, left out of totalValue" }, "onSaleCount": { "type": "integer", "description": "Games on sale right now" }, "playtime": { "type": [ "object", "null" ], "properties": { "totalMinutes": { "type": "integer" }, "recentMinutes": { "type": "integer", "description": "Over the last two weeks" }, "playedCount": { "type": "integer", "description": "Games played at least a minute" } }, "required": [ "totalMinutes", "recentMinutes", "playedCount" ], "description": "null when the owner hides their playtime" }, "achievements": { "type": [ "object", "null" ], "properties": { "unlocked": { "type": "integer" }, "perfectGames": { "type": "integer", "description": "Games with every achievement" }, "averageCompletion": { "type": "number", "description": "Mean share unlocked over the games started, percent (0–100)" } }, "required": [ "unlocked", "perfectGames", "averageCompletion" ], "description": "null when no game has achievements" } }, "required": [ "gameCount", "totalValue", "notOnStoreCount", "onSaleCount", "playtime", "achievements" ] }, "Game": { "type": "object", "properties": { "appId": { "type": "integer", "description": "Steam app id" }, "name": { "type": "string" }, "image": { "type": "string", "description": "Store header capsule (460×215)" }, "playtimeMinutes": { "type": [ "integer", "null" ], "description": "Lifetime playtime; null when the owner hides their playtime" }, "recentPlaytimeMinutes": { "type": [ "integer", "null" ], "description": "Playtime over the last two weeks; null when playtime is hidden" }, "isFree": { "type": "boolean", "description": "Free to play on the Steam store" }, "price": { "type": [ "integer", "null" ], "description": "Regular US store price, integer USD cents; 0 when free, null when the game is no longer sold" }, "discount": { "type": [ "object", "null" ], "properties": { "percent": { "type": "integer", "description": "1–100" }, "price": { "type": "integer", "description": "Sale price, integer USD cents" }, "endsAt": { "type": [ "string", "null" ], "format": "date-time", "description": "When the sale ends; null when Steam doesn't say" } }, "required": [ "percent", "price", "endsAt" ], "description": "The store sale running now; null when there is none" }, "achievements": { "type": [ "object", "null" ], "properties": { "achieved": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "achieved", "total" ], "description": "The owner's progress; null when the game has no achievements" } }, "required": [ "appId", "name", "image", "playtimeMinutes", "recentPlaytimeMinutes", "isFree", "price", "discount", "achievements" ] } }, "parameters": {} }, "paths": { "/v1/items": { "get": { "tags": [ "Items" ], "operationId": "get-items", "summary": "List items", "description": "Every CS2 item with its lowest price and the offer on each marketplace. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "ak redline" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears", "example": "Factory New,Minimal Wear" }, "required": false, "description": "Comma-separated wears", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "normal", "stattrak", "souvenir" ], "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none" }, "required": false, "description": "Only this quality. `normal` also leaves out stickers, cases and other kinds that have none", "name": "quality", "in": "query" }, { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "description": "Only items this marketplace lists now" }, "required": false, "description": "Only items this marketplace lists now", "name": "marketplace", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents" }, "required": false, "description": "`price` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`listings` at least this" }, "required": false, "description": "`listings` at least this", "name": "minListings", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "change24h", "change7d", "change30d" ], "default": "name", "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents" }, "required": false, "description": "Items with no value to sort by come last: nothing listed for `price`, no reliable baseline for a change. For gainers or losers, add `minPrice` and `minListings` so cheap and thinly listed items don't lead on moves of a few cents", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the market", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Item" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ], "pagination": { "page": 1, "limit": 100, "total": 44379, "totalPages": 444 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}": { "get": { "tags": [ "Items" ], "operationId": "get-items-by-name", "summary": "Get item", "description": "One CS2 item by its Steam market hash name. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" } ], "responses": { "200": { "description": "The item", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Item" }, "example": { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "phase", "message": "Invalid option: expected one of \"Phase 1\"|\"Phase 2\"|\"Phase 3\"|\"Phase 4\"|\"Ruby\"|\"Sapphire\"|\"Black Pearl\"|\"Emerald\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/items/{marketHashName}/history": { "get": { "tags": [ "Items" ], "operationId": "get-items-history", "summary": "Get item price history", "description": "Daily price history of one CS2 item. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 300, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "example": "★ StatTrak™ Karambit | Doppler (Factory New)" }, "required": true, "description": "The Steam market hash name, URL-encoded (`encodeURIComponent`)", "name": "marketHashName", "in": "path", "example": "{marketHashName}" }, { "schema": { "type": "string", "enum": [ "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire", "Black Pearl", "Emerald" ], "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "example": "Phase 4" }, "required": false, "description": "Required when Doppler phases share the market hash name; without it the 400 lists the phases the name has", "name": "phase", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The item's daily price points", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/PricePoint" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-09-28", "low": 2500, "median": 2704, "marketplaces": 10, "listings": 7411, "steamLow": 3437 }, { "day": "2026-09-29", "low": 2528, "median": 2681, "marketplaces": 10, "listings": 7438, "steamLow": 3420 }, { "day": "2026-09-30", "low": 2500, "median": 2701, "marketplaces": 10, "listings": 8953, "steamLow": 3434 } ] } } } }, "400": { "description": "The name is shared by Doppler phases and `phase` is missing; `details.phases` lists them", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PHASE_REQUIRED", "message": "Doppler phases share this name. Pass phase, one of: Black Pearl, Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire.", "details": { "phases": [ "Black Pearl", "Phase 1", "Phase 2", "Phase 3", "Phase 4", "Ruby", "Sapphire" ] }, "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that name, or not in that phase", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that market hash name.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped", "summary": "List grouped items", "description": "CS2 items with their wears, StatTrak™ and Souvenir versions grouped into one entry. Costs 1 credit per page.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the item's name", "example": "ak redline" }, "required": false, "description": "Words in the item's name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated weapon names", "example": "AK-47,AWP" }, "required": false, "description": "Comma-separated weapon names", "name": "weapon", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated rarity names", "example": "Covert,Classified" }, "required": false, "description": "Comma-separated rarity names", "name": "rarity", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated wears the item must come in", "example": "Factory New" }, "required": false, "description": "Comma-separated wears the item must come in", "name": "exterior", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated Doppler phases", "example": "Ruby,Sapphire" }, "required": false, "description": "Comma-separated Doppler phases", "name": "phase", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "example": "the-cobblestone-collection" }, "required": false, "description": "Comma-separated collection slugs, as `/v1/collections` lists them", "name": "collection", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either" }, "required": false, "description": "`true`: items that come in StatTrak™, `false`: items that never do. With `souvenir=true` as well, items that come in either", "name": "stattrak", "in": "query" }, { "schema": { "type": "string", "enum": [ "true", "false" ], "description": "`true`: items that come as Souvenir, `false`: items that never do" }, "required": false, "description": "`true`: items that come as Souvenir, `false`: items that never do", "name": "souvenir", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at least this, integer USD cents" }, "required": false, "description": "`minPrice` at least this, integer USD cents", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`minPrice` at most this, integer USD cents" }, "required": false, "description": "`minPrice` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": "string", "enum": [ "name", "price", "listings" ], "default": "name", "description": "`price` sorts by `minPrice`; items with nothing listed come last" }, "required": false, "description": "`price` sorts by `minPrice`; items with nothing listed come last", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "asc" }, "required": false, "name": "order", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Items per page, up to 1000", "example": 100 }, "required": false, "description": "Items per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the grouped catalog", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/GroupedItem" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4 } ], "pagination": { "page": 1, "limit": 100, "total": 29069, "totalPages": 291 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=1000" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/grouped-items/{slug}": { "get": { "tags": [ "Items" ], "operationId": "get-items-grouped-by-slug", "summary": "Get grouped item", "description": "One grouped CS2 item with each of its versions. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "example": "karambit-doppler-phase-4" }, "required": true, "description": "The item's slug, as `/v1/grouped-items` and `itemSlug` in `/v1/items` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The item and its versions", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupedItemDetail" }, "example": { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "items": [ { "marketHashName": "★ StatTrak™ Karambit | Doppler (Factory New)", "name": "★ Karambit | Doppler", "itemSlug": "karambit-doppler-phase-4", "type": "skin", "weapon": "Karambit", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Factory New", "quality": "stattrak", "phase": "Phase 4", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "price": 119990, "listings": 69, "change24h": -1.82, "change7d": -2.22, "change30d": -6.91, "markets": [ { "marketplace": "skinport", "price": 119990, "listings": 1 }, { "marketplace": "dmarket", "price": 122130, "listings": 7 }, { "marketplace": "lisskins", "price": 124633, "listings": 11 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No item has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No item has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/marketplaces": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-marketplaces", "summary": "List marketplaces", "description": "Every marketplace SkinMarketCap tracks, with its items, listings and last update. Costs 1 credit.", "responses": { "200": { "description": "The marketplaces and their totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Marketplaces" }, "example": { "totals": { "itemCount": 38981, "listings": 35179790, "listedValue": 33297548712 }, "marketplaces": [ { "marketplace": "skinport", "active": true, "itemCount": 25256, "listings": 3680935, "listedValue": 1535290698, "updatedAt": "2026-09-30T16:30:35.546Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview", "summary": "Get market overview", "description": "A snapshot of the CS2 market: listed value, SMC Index and Fear & Greed score. Costs 1 credit.", "responses": { "200": { "description": "The market overview", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketOverview" }, "example": { "updatedAt": "2026-10-03T10:58:02.067Z", "listed": { "value": 26355760340, "change24h": -0.19, "listings": 11949592, "marketplaces": 10 }, "index": { "value": 328903739, "variants": 32765, "change24h": 0, "change7d": 0.57, "change30d": 9.81, "volatility30d": 11.28 }, "segments": [ { "segment": "knife", "value": 152529147, "variants": 3767, "change24h": 0.01, "change7d": -0.64, "change30d": 12.18, "volatility30d": 22.57 } ], "breadth": { "day": { "up": 12286, "down": 12314, "flat": 8164 }, "week": { "up": 9978, "down": 14572, "flat": 7737 } }, "netListings": { "day": "2026-10-03", "value": -41611 }, "dominance": [ { "segment": "knife", "value": 10138166626, "share": 38.5 }, { "segment": "rifle", "value": 5264649781, "share": 20 }, { "segment": "gloves", "value": 4030364538, "share": 15.3 } ], "sentiment": { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80, "previousScore": 77 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/index/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-index-history", "summary": "Get SMC Index history", "description": "Daily history of the SMC Index for the whole market or one segment. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" }, { "schema": { "type": "string", "enum": [ "all", "knife", "gloves", "rifle", "pistol", "container" ], "default": "all", "description": "`all` for the whole market, or one segment", "example": "knife" }, "required": false, "description": "`all` for the whole market, or one segment", "name": "segment", "in": "query" } ], "responses": { "200": { "description": "The index's daily rows", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketIndexDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "total": 329402870, "variants": 32758, "change": 0.5131, "compared": 28238, "advancers": 11439, "decliners": 10780 }, { "day": "2026-10-02", "total": 328928159, "variants": 32763, "change": -0.1441, "compared": 27559, "advancers": 14943, "decliners": 5641 }, { "day": "2026-10-03", "total": 328903739, "variants": 32765, "change": -0.0074, "compared": 28637, "advancers": 8241, "decliners": 12948 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "segment", "message": "Invalid option: expected one of \"all\"|\"knife\"|\"gloves\"|\"rifle\"|\"pistol\"|\"container\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/sentiment/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-sentiment-history", "summary": "Get Fear & Greed history", "description": "Daily history of the Fear & Greed score. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily scores", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketSentimentDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "score": 78, "label": "extremeGreed", "momentum": 94, "volatility": 100, "breadth": 66, "supply": 21, "riskAppetite": 100 }, { "day": "2026-10-02", "score": 77, "label": "extremeGreed", "momentum": 91, "volatility": 99, "breadth": 72, "supply": 19, "riskAppetite": 93 }, { "day": "2026-10-03", "score": 76, "label": "extremeGreed", "momentum": 90, "volatility": 100, "breadth": 78, "supply": 15, "riskAppetite": 80 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/market-overview/listings/history": { "get": { "tags": [ "Market Overview" ], "operationId": "get-market-overview-listings-history", "summary": "Get listings history", "description": "Daily history of the value and number of marketplace listings. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 730, "description": "The last this many days, today included; without it, the whole history", "example": 30 }, "required": false, "description": "The last this many days, today included; without it, the whole history", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The daily totals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketListingsDay" } } }, "required": [ "data" ] }, "example": { "data": [ { "day": "2026-10-01", "listedValue": 26266358806, "listings": 11934887, "netListings": 5339, "marketplaces": 10 }, { "day": "2026-10-02", "listedValue": 26406567461, "listings": 11991203, "netListings": 56316, "marketplaces": 10 }, { "day": "2026-10-03", "listedValue": 26355760340, "listings": 11949592, "netListings": -41611, "marketplaces": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Price History API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "days", "message": "Too big: expected number to be <=730" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/deals": { "get": { "tags": [ "Marketplaces" ], "operationId": "get-deals", "summary": "List deals", "description": "CS2 items listed below the reference marketplace's price, biggest discount first. Costs 2 credits per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "enum": [ "skinport", "dmarket", "csmoney", "steam", "buff163", "lisskins", "csfloat", "marketcsgo", "avanmarket", "waxpeer", "shadowpay" ], "default": "steam", "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote" }, "required": false, "description": "The marketplace every deal is measured against; it is never the one to buy from. `steam` is the price most players know, `buff163` the one traders quote", "name": "reference", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Words in the market hash name", "example": "karambit doppler" }, "required": false, "description": "Words in the market hash name", "name": "q", "in": "query" }, { "schema": { "type": "string", "minLength": 1, "maxLength": 500, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "example": "knife,gloves" }, "required": false, "description": "Comma-separated, any of: knife, gloves, pistol, rifle, sniper-rifle, smg, shotgun, machinegun, sticker, container, charm, agent, music-kit, equipment", "name": "category", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise" }, "required": false, "description": "`price` at least this, integer USD cents. Defaults to 50: percent discounts on the cheapest items are rounding noise", "name": "minPrice", "in": "query" }, { "schema": { "type": [ "integer", "null" ], "minimum": 0, "description": "`price` at most this, integer USD cents" }, "required": false, "description": "`price` at most this, integer USD cents", "name": "maxPrice", "in": "query" }, { "schema": { "type": [ "number", "null" ], "minimum": 0, "maximum": 99, "description": "`discount` at least this", "example": 10 }, "required": false, "description": "`discount` at least this", "name": "minDiscount", "in": "query" }, { "schema": { "type": "string", "enum": [ "discount", "difference" ], "default": "discount", "description": "Largest first" }, "required": false, "description": "Largest first", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Deals per page, up to 1000", "example": 100 }, "required": false, "description": "Deals per page, up to 1000", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of deals", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Deal" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "marketHashName": "★ Bayonet | Doppler (Minimal Wear)", "name": "★ Bayonet | Doppler", "itemSlug": "bayonet-doppler-ruby", "weapon": "Bayonet", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "exterior": "Minimal Wear", "quality": "normal", "phase": "Ruby", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLzn4_v8ydP0POjV7Z4IumsA2aCw-JzuftsSxa_nBovp3PWnomsdn2QPVN0D5UiEOUP50LtltTvY-Ll4g3YjItFmSv-2i9A6X4-_a9cBu2YVmHc", "price": 167500, "marketplace": "csmoney", "listings": 4, "reference": "buff163", "referencePrice": 414691, "discount": 59.61, "difference": 247191 } ], "pagination": { "page": 1, "limit": 100, "total": 15343, "totalPages": 154 } } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Deals API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "minDiscount", "message": "Too big: expected number to be <=99" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections": { "get": { "tags": [ "Collections" ], "operationId": "get-collections", "summary": "List collections", "description": "Every CS2 collection with its item count and price range. Costs 1 credit.", "responses": { "200": { "description": "Every collection", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Collection" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ] } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/collections/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-collections-by-slug", "summary": "Get collection", "description": "One CS2 collection with every item in it. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "example": "the-2021-train-collection" }, "required": true, "description": "The collection's slug, as `/v1/collections` and an item's `collections` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The collection and its items", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionDetail" }, "example": { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/set_icons/set_train_2021.a000b6d4ae1978aeced8ec31aa8ef5a0014dae29.png", "releaseDate": "2021-09-22", "itemCount": 21, "minPrice": 119, "maxPrice": 774503, "rarities": [ { "name": "Mil-Spec Grade", "color": "#4b69ff", "count": 7 }, { "name": "Covert", "color": "#eb4b4b", "count": 6 }, { "name": "Restricted", "color": "#8847ff", "count": 5 } ], "items": [ { "slug": "glock-18-gamma-doppler-emerald", "name": "Glock-18 | Gamma Doppler", "type": "skin", "weapon": "Glock-18", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF0828063004380005D378D4", "minPrice": 17524, "maxPrice": 744527, "collections": [ { "slug": "the-2021-train-collection", "name": "The 2021 Train Collection" } ], "crates": [], "qualities": [ { "quality": "normal", "minPrice": 17524, "maxPrice": 37673 }, { "quality": "souvenir", "minPrice": 43482, "maxPrice": 744527 } ], "listings": 802, "variantCount": 10 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No collection has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No collection has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates": { "get": { "tags": [ "Collections" ], "operationId": "get-crates", "summary": "List crates", "description": "CS2 cases, capsules and other crates, priciest first. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "case", "souvenir", "autograph-capsule", "sticker-capsule", "souvenir-highlight", "music-kit-box", "patch-capsule", "pins", "graffiti", "other" ], "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "example": "case" }, "required": false, "description": "Only crates of this kind; without it, every crate. `other` holds the crates the game leaves untyped", "name": "kind", "in": "query" } ], "responses": { "200": { "description": "The crates", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Crate" } } }, "required": [ "data" ] }, "example": { "data": [ { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936 } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "kind", "message": "Invalid option: expected one of \"case\"|\"souvenir\"|\"autograph-capsule\"|\"sticker-capsule\"|\"souvenir-highlight\"|\"music-kit-box\"|\"patch-capsule\"|\"pins\"|\"graffiti\"|\"other\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/crates/{slug}": { "get": { "tags": [ "Collections" ], "operationId": "get-crates-by-slug", "summary": "Get crate", "description": "One CS2 crate with everything it can drop. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "maxLength": 200, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "example": "chroma-case" }, "required": true, "description": "The crate's slug, as `/v1/crates` and an item's `crates` give it", "name": "slug", "in": "path", "example": "{slug}" } ], "responses": { "200": { "description": "The crate and what it drops", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CrateDetail" }, "example": { "slug": "chroma-case", "name": "Chroma Case", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGJKz2lu_XsnXwtmkJjSU91dh8bj35VTqVBP4io_fq2wP7qr6bqI5cvHDCzfBlbcv57JqF3zrxRkj4W6Dwo34dy6QPQAoC5ZyW6dU5cxvklfG", "kind": "case", "releaseDate": "2015-01-08", "itemCount": 74, "price": 434, "listings": 14936, "items": [ { "slug": "karambit-doppler-phase-4", "name": "★ Karambit | Doppler", "type": "skin", "weapon": "Karambit", "image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL6kJ_m-B1Q7uCvZaZkNM-SA1iUzv5mvOR7cDm7lA4i5wKJk4jxNWXCaQQnA5B5Q-8O4xnpltazNri37gGPgtlDzin7iXhN6y44tb0GUaYg5OSJ2A0QBM1-", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "phase": "Phase 4", "inspectLink": "steam://run/730//+csgo_econ_action_preview%200018FB0320A503280630033800F39585B9", "minPrice": 119990, "maxPrice": 140000, "collections": [ { "slug": "the-chroma-collection", "name": "The Chroma Collection" }, { "slug": "the-chroma-2-collection", "name": "The Chroma 2 Collection" }, { "slug": "the-chroma-3-collection", "name": "The Chroma 3 Collection" } ], "crates": [ { "slug": "chroma-case", "name": "Chroma Case" }, { "slug": "chroma-2-case", "name": "Chroma 2 Case" }, { "slug": "chroma-3-case", "name": "Chroma 3 Case" } ], "qualities": [ { "quality": "normal", "minPrice": 124000, "maxPrice": 131781 }, { "quality": "stattrak", "minPrice": 119990, "maxPrice": 140000 } ], "listings": 424, "variantCount": 4, "rare": true } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No crate has that slug", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "No crate has that slug.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "slug", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/top": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-top", "summary": "List top inventories", "description": "The most valuable Steam inventories SkinMarketCap has priced. Costs 1 credit.", "parameters": [ { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Rows to return from the top, up to 100", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 100", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The board, most valuable first", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopInventory" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 2, "previousRank": 4, "isNew": false, "steamId": "76561198801475475", "personaName": "14! `77 X", "avatar": "https://avatars.steamstatic.com/baf0c5a98f747fd4a9788275c6c74f7ce8240283_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198801475475/", "totalValue": 61754469, "change24h": -0.12, "change7d": -0.62, "change30d": -1.6, "itemCount": 126, "uniqueCount": 49, "valuedCount": 41, "history": [ { "day": "2026-09-01", "value": 56953169 }, { "day": "2026-09-16", "value": 56648871 }, { "day": "2026-10-01", "value": 56044442 } ], "updatedAt": "2026-09-30T16:37:38.305Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/inventories/pros": { "get": { "tags": [ "Leaderboards" ], "operationId": "get-inventories-pros", "summary": "List pro players", "description": "Every CS2 pro on Valve's roster with their inventory value. Costs 1 credit.", "parameters": [ { "schema": { "type": "string", "enum": [ "popularity", "value", "items" ], "default": "popularity", "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each" }, "required": false, "description": "`popularity` puts first the players whose autograph stickers the market pays most for, recent Majors weighing most; `value` the most valuable inventory; `items` the most items. Players without a valuation come last under each", "name": "sort", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Rows to return from the top, up to 1000", "example": 100 }, "required": false, "description": "Rows to return from the top, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "example": 7 }, "required": false, "description": "Limits `history` to the last this many days, today included; without it, all of it. `change24h`, `change7d` and `change30d` don't depend on it", "name": "days", "in": "query" } ], "responses": { "200": { "description": "The pros, ordered by `sort`", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ProPlayer" } } }, "required": [ "data" ] }, "example": { "data": [ { "rank": 3, "steamId": "76561198074762801", "nickname": "m0NESY", "realName": "Ilya Osipov", "countryCode": "RU", "teamTag": "FAL", "majorCount": 7, "photo": "https://cdn.skinmarketcap.app/players/cs2/76561198074762801-4ffd6401.webp", "personaName": "m0", "profileUrl": "https://steamcommunity.com/id/m0NESY-/", "totalValue": 3602713, "change24h": -1.49, "change7d": -2.51, "change30d": -5.77, "itemCount": 474, "uniqueCount": 270, "valuedCount": 232, "history": [ { "day": "2026-09-01", "value": 3728339 }, { "day": "2026-09-16", "value": 3707484 }, { "day": "2026-10-01", "value": 3513060 } ], "updatedAt": "2026-09-25T23:59:59.307Z" } ] } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"popularity\"|\"value\"|\"items\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile", "summary": "Get profile", "description": "A Steam account's profile, level, friend count and ban record. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The profile", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" }, "example": { "steamId": "76561198210421051", "personaName": "Jesus", "avatar": "https://avatars.steamstatic.com/33306bc5b6ab9642c7db90d89d3e9e5fb4101894_full.jpg", "profileUrl": "https://steamcommunity.com/profiles/76561198210421051/", "isPublic": true, "countryCode": "US", "createdAt": "2015-08-02T16:45:47.000Z", "steamLevel": 12, "gameCount": 10, "playtime": { "totalMinutes": 4301, "cs2Minutes": 3860 }, "friendCount": 0, "bans": { "vacBans": 0, "gameBans": 0, "communityBanned": false, "economyBan": "none", "daysSinceLastBan": 0 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/inventory": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-inventory", "summary": "Get inventory", "description": "A player's CS2 inventory with every item priced and the total value. Costs 10 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The priced inventory", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Inventory" }, "example": { "itemCount": 990, "uniqueCount": 474, "valuedCount": 474, "totalValue": 56221603, "history": [ { "day": "2026-09-28", "value": 56253824 }, { "day": "2026-09-29", "value": 56097081 }, { "day": "2026-09-30", "value": 56221603 } ], "items": [ { "assetId": "8651094772", "marketHashName": "Glock-18 | Gamma Doppler (Factory New)", "name": "Glock-18 | Gamma Doppler", "image": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyL2kpnj9h1a4s2rZaF_IfyXMWqR0-x6tehzSi2MkhEosDa6lob-KT-JPwZzA5J4F-8Mt0a-ktTvNeyws1PfjIsQyiX9h3gYvSpr5bwFWash-7qX0V9IgS2WPw/512fx384f", "exterior": "Factory New", "category": "Pistol", "rarity": { "name": "Covert", "color": "#eb4b4b" }, "tradable": true, "marketable": true, "count": 1, "float": 0.019824534654617, "paintSeed": 661, "phase": "Emerald", "inspectLink": "steam://run/730//+csgo_econ_action_preview%2000180420DF082806300438A9B8BDE803002C1038", "stickers": [ { "name": "Sticker | Howling Dawn", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/stickers/community01/howling_dawn.3db24ec67d12d796093ec706e6dab29f25850a9b.png", "wear": 0, "price": 120680, "slug": "sticker-howling-dawn" } ], "charm": { "name": "Charm | Diamond Dog", "image": "https://cdn.steamstatic.com/apps/730/icons/econ/keychains/missinglink/kc_missinglink_sam_diamond.b6b92c8b0c3d0dcf724bd0357d93c0cb447916f6.png", "price": 554, "slug": "charm-diamond-dog" }, "price": 37799, "change24h": 1.84, "change7d": -3.12, "change30d": 6.47, "slug": "glock-18-gamma-doppler-emerald" } ] } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The inventory is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "INVENTORY_PRIVATE": { "summary": "The inventory is private", "value": { "error": true, "code": "INVENTORY_PRIVATE", "message": "This Steam inventory is private. Ask the owner to make their inventory public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Inventory API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_RATE_LIMITED", "message": "Steam is rate-limiting inventory lookups right now. Please try again in a few minutes.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/friends": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-friends", "summary": "List friends", "description": "A Steam account's friends list. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100, "description": "Friends per page, up to 100", "example": 100 }, "required": false, "description": "Friends per page, up to 100", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "One page of the friends list", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Friend" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "steamId": "76561198004854956", "personaName": "dupreeh", "avatar": "https://avatars.steamstatic.com/e12aeafea28030bcf86bdc2fed4bbc6ec6205856_medium.jpg", "profileUrl": "https://steamcommunity.com/id/duppedaddy/", "isPublic": true, "countryCode": "DK", "friendSince": "2022-01-10T09:14:10.000Z" } ], "pagination": { "page": 1, "limit": 100, "total": 362, "totalPages": 4 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The friends list is private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "FRIENDS_PRIVATE": { "summary": "The friends list is private", "value": { "error": true, "code": "FRIENDS_PRIVATE", "message": "This Steam friends list is private. Ask the owner to make their friends list public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "limit", "message": "Too big: expected number to be <=100" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/stats": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-stats", "summary": "Get CS2 stats", "description": "A player's CS2 stats from FACEIT, Leetify and Steam. Costs 2 credits. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The player's stats", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Stats" }, "example": { "faceit": { "playerId": "d3de50b6-c0fb-4d93-a304-0bdf7749ea5d", "nickname": "ropz", "url": "https://www.faceit.com/en/players/ropz", "avatar": "https://distribution.faceit-cdn.net/images/702c7586-cb7e-4866-9864-1a700f5143c0.jpeg", "countryCode": "EE", "createdAt": "2014-10-25T00:49:23.393Z", "game": "cs2", "level": 10, "elo": 2584, "stats": { "matches": 4131, "wins": 2486, "winRate": 60.18, "kdRatio": 1.4, "headshotPercent": 52, "adr": 75.93, "utilityDamagePerRound": 3.1, "clutch1v1WinRate": 45, "clutch1v2WinRate": 32, "recentResults": [ "win", "win", "win" ], "longestWinStreak": 14, "currentWinStreak": 5, "entryRate": 16, "entrySuccessRate": 58, "flashSuccessRate": 40, "enemiesFlashedPerRound": 0.21, "sniperKillRate": 5, "maps": [ { "map": "de_ancient", "matches": 14, "wins": 10, "winRate": 71.43, "kdRatio": 1.57, "headshotPercent": 54, "adr": 75.9 } ] } }, "matchmaking": { "premier": { "rating": 27325, "recentResults": [ "win", "win", "win" ], "stats": { "matches": 3, "wins": 3, "winRate": 100, "peakRating": 27325, "kdRatio": 2.08, "headshotPercent": 68.35, "adr": 109.61 } }, "wingmanRank": 17, "competitiveRanks": [ { "map": "de_nuke", "rank": 16 }, { "map": "de_dust2", "rank": 16 }, { "map": "de_train", "rank": 16 } ] }, "leetify": { "url": "https://leetify.com/app/profile/76561197991272318", "winRate": 63.33, "totalMatches": 2310, "skills": { "aim": 98.7776, "positioning": 69.4974, "utility": 48.732, "opening": -3.13, "clutch": 7.04 }, "ratings": { "leetify": 0.26, "ct": 0.48, "t": 0.03 }, "aimStats": { "hsAccuracy": 24.0112, "crosshairPlacement": 8.0045, "reactionTimeMs": 402.7871, "sprayAccuracy": 49.9697, "counterStrafing": 89.1727, "spottedAccuracy": 46.4277 }, "heDamage": { "enemies": 7.1097, "team": 0.6691 }, "openingDuels": { "ctSuccess": 56.9246, "tSuccess": 47.5816, "ctAggressionSuccess": 52.5369, "tAggressionSuccess": 58.018 }, "trading": { "tradeKillSuccess": 50.8674, "tradedDeathSuccess": 49.3337, "opportunitiesPerRound": 0.3127 }, "flashbangs": { "thrown": 5.1987, "hitFoePerFlashbang": 0.4747, "hitFriendPerFlashbang": 0.3088, "foeBlindDuration": 2.542, "leadingToKill": 5.9884 }, "utilityOnDeath": 301.5647 }, "steam": { "kills": 439273, "deaths": 394601, "kdRatio": 1.11, "rounds": 341327, "matches": 12530, "wins": 6273, "winRate": 50.06, "headshotPercent": 72.92, "accuracy": 17.57, "playtimeHours": 22879, "mvps": 44372, "bombsPlanted": 13081, "bombsDefused": 3587, "knifeKills": 5157, "favoriteWeapon": { "weapon": "ak47", "kills": 227437 }, "weapons": [ { "weapon": "ak47", "kills": 227437, "accuracy": 29.5 }, { "weapon": "m4a1", "kills": 102842, "accuracy": 24.95 }, { "weapon": "hkp2000", "kills": 77239, "accuracy": 30.41 } ], "bestMap": { "map": "de_dust2", "wins": 26437 } } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Stats API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "FACEIT (`FACEIT_UNAVAILABLE`), Leetify (`LEETIFY_UNAVAILABLE`) or Steam (`STEAM_UNAVAILABLE`) is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "FACEIT_UNAVAILABLE", "message": "FACEIT is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/summary": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library", "summary": "Get library summary", "description": "A summary of the games a Steam account owns and what they are worth. Costs 1 credit. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" } ], "responses": { "200": { "description": "The library's summary", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LibrarySummary" }, "example": { "gameCount": 10, "totalValue": 7994, "notOnStoreCount": 1, "onSaleCount": 2, "playtime": { "totalMinutes": 4301, "recentMinutes": 0, "playedCount": 7 }, "achievements": { "unlocked": 22, "perfectGames": 0, "averageCompletion": 3.04 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "steamId", "message": "Too big: expected string to have <=200 characters" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } }, "/v1/profiles/{steamId}/library/games": { "get": { "tags": [ "Profiles" ], "operationId": "get-profile-library-games", "summary": "List library games", "description": "The games a Steam account owns, with playtime, price and achievements. Costs 1 credit per page. Needs the Starter plan or above.", "parameters": [ { "schema": { "type": "string", "maxLength": 200, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "example": "76561198210421051" }, "required": true, "description": "A SteamID64, a Steam Community profile URL or a custom-URL (vanity) name.", "name": "steamId", "in": "path", "example": "{steamId}" }, { "schema": { "type": "integer", "minimum": 1, "default": 1, "description": "Page to return, from 1", "example": 1 }, "required": false, "description": "Page to return, from 1", "name": "page", "in": "query" }, { "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 100, "description": "Games per page, up to 1000", "example": 100 }, "required": false, "description": "Games per page, up to 1000", "name": "limit", "in": "query" }, { "schema": { "type": "string", "enum": [ "playtime", "recentPlaytime", "price", "name" ], "default": "playtime", "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price" }, "required": false, "description": "`playtime` and `recentPlaytime` in minutes, `price` the regular store price. Games the store no longer sells come last when sorting by price", "name": "sort", "in": "query" }, { "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "required": false, "name": "order", "in": "query" } ], "responses": { "200": { "description": "One page of the library's games", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "X-Credits-Limit": { "schema": { "type": "integer", "description": "The plan's monthly credits" }, "required": true, "description": "The plan's monthly credits" }, "X-Credits-Remaining": { "schema": { "type": "integer", "description": "Credits left in the current monthly window" }, "required": true, "description": "Credits left in the current monthly window" }, "X-Credits-Reset": { "schema": { "type": "integer", "description": "Seconds until the credits reset" }, "required": true, "description": "Seconds until the credits reset" }, "X-Credits-Cost": { "schema": { "type": "integer", "description": "Credits this request cost" }, "required": true, "description": "Credits this request cost" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Game" } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "totalPages": { "type": "integer" } }, "required": [ "page", "limit", "total", "totalPages" ] } }, "required": [ "data", "pagination" ] }, "example": { "data": [ { "appId": 297000, "name": "Heroes of Might & Magic III - HD Edition", "image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/297000/header.jpg?t=1787846053", "playtimeMinutes": 1, "recentPlaytimeMinutes": 0, "isFree": false, "price": 1499, "discount": { "percent": 75, "price": 374, "endsAt": "2026-10-01T17:00:00.000Z" }, "achievements": { "achieved": 0, "total": 13 } } ], "pagination": { "page": 1, "limit": 100, "total": 10, "totalPages": 1 } } } } }, "400": { "description": "The Steam id could not be parsed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "BAD_REQUEST", "message": "Enter a SteamID, profile URL, or username.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "401": { "description": "The API key is missing, invalid or revoked", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "402": { "description": "The monthly credits are used up and the balance can't pay for extra usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "INSUFFICIENT_BALANCE", "message": "The Starter plan's 100000 monthly credits are used up and the balance can't pay for extra usage. Top up at https://skinmarketcap.app/account/developers.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "403": { "description": "The owner keeps their game details private, or the plan does not include this endpoint", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "LIBRARY_PRIVATE": { "summary": "The owner keeps their game details private", "value": { "error": true, "code": "LIBRARY_PRIVATE", "message": "This Steam library is private. Ask the owner to make their game details public, then try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } }, "PLAN_UPGRADE_REQUIRED": { "summary": "The plan does not include this endpoint", "value": { "error": true, "code": "PLAN_UPGRADE_REQUIRED", "message": "The Free plan does not include the Profiles API, which starts at the Starter plan.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } }, "404": { "description": "No Steam account matches the id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "NOT_FOUND", "message": "We couldn't find that Steam profile. Check the SteamID, profile link, or username and try again.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "422": { "description": "A parameter is invalid; `details` lists each failure", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ { "path": "sort", "message": "Invalid option: expected one of \"playtime\"|\"recentPlaytime\"|\"price\"|\"name\"" } ], "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "429": { "description": "The per-minute limit, monthly credits or extra usage limit is used up", "headers": { "RateLimit": { "schema": { "type": "string", "description": "Requests left in the current minute and seconds until it resets", "example": "limit=30, remaining=29, reset=42" }, "required": true, "description": "Requests left in the current minute and seconds until it resets" }, "RateLimit-Policy": { "schema": { "type": "string", "description": "The plan's requests per minute", "example": "30;w=60" }, "required": true, "description": "The plan's requests per minute" }, "Retry-After": { "schema": { "type": "integer", "description": "Seconds to wait before retrying" }, "required": true, "description": "Seconds to wait before retrying" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "RATE_LIMITED", "message": "The Free plan allows 10 requests per minute.", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } }, "503": { "description": "Steam is unavailable or rate-limiting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": true, "code": "STEAM_UNAVAILABLE", "message": "Steam is unavailable right now (HTTP 429).", "requestId": "3f2b8c1e-7a4d-4e9b-9c6f-1d2e3a4b5c6d" } } } } } } } }, "webhooks": {} } ```