API

Export all item prices

GET /prices/export — Export all item prices

Operation

GET /prices/export

Behavior

Downloads the quotes of every priced item of one game as one file, for bulk synchronization. side defaults to ask; side=mid exports only the CSCP valuation of every valued item, a much smaller file.

  • The body is the export document itself (app_id, side, generated_at, items), gzip-compressed (Content-Encoding: gzip) — not the usual envelope. The request id and the billing fields are response headers instead: X-Request-ID, X-Billable, and on a billed response X-Credit-Cost and X-Credit-Remaining.
  • items lists every item with at least one quote on the requested side, ordered by market hash name; each item's quotes follow the same rules as GET /prices.
  • The file is a snapshot rebuilt on the server every few minutes; generated_at (also the X-Export-Generated-At header) says when. Requests in between receive the same file.
  • Send the ETag you received back as If-None-Match: while the snapshot is unchanged the answer is 304 Not Modified with no body, and a 304 is never billed.
  • Range requests are not supported; the whole file is always sent. There is no pagination or market filter.
  • 503 dependency_unavailable means the first snapshot has not been built yet; retry after a minute.

[!warning] Every 200 is billed, even when the file has not changed. Poll with If-None-Match and you only pay when there is something new.

Usage

{
  "authentication": "user-api-key",
  "credit_cost": 10,
  "premium": false,
  "recommended_interval_seconds": 300,
  "rate_limit": {
    "max_requests": 2,
    "window_seconds": 60
  },
  "unit_pricing": null
}

Request

{
  "parameters": [
    {
      "name": "app_id",
      "in": "query",
      "required": false,
      "schema": {
        "type": "string",
        "minLength": 1,
        "maxLength": 16,
        "description": "Steam app ID of the game. Defaults to `730` (Counter-Strike 2).",
        "default": "730",
        "title": "App Id"
      },
      "description": "Steam app ID of the game. Defaults to `730` (Counter-Strike 2)."
    },
    {
      "name": "side",
      "in": "query",
      "required": false,
      "schema": {
        "enum": [
          "ask",
          "bid",
          "mid",
          "all"
        ],
        "type": "string",
        "description": "Which side of the market to return: `ask` for sell listings, `bid` for buy orders, `mid` for the CSCP valuation, `all` for everything. Defaults to `ask`.",
        "default": "ask",
        "title": "Side"
      },
      "description": "Which side of the market to return: `ask` for sell listings, `bid` for buy orders, `mid` for the CSCP valuation, `all` for everything. Defaults to `ask`."
    }
  ]
}

Responses

{
  "200": {
    "description": "Successful Response",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ExportOut"
        }
      }
    },
    "headers": {
      "ETag": {
        "description": "Validator of this snapshot: send it back in `If-None-Match`.",
        "schema": {
          "type": "string"
        }
      },
      "Last-Modified": {
        "description": "When this snapshot was built, as an HTTP date.",
        "schema": {
          "type": "string"
        }
      },
      "Content-Encoding": {
        "description": "Always `gzip`: the file is stored compressed.",
        "schema": {
          "type": "string"
        }
      },
      "X-Export-Generated-At": {
        "description": "When this snapshot was built, in RFC 3339 UTC.",
        "schema": {
          "type": "string"
        }
      },
      "X-Billable": {
        "description": "`true` when this response was billed, else `false`.",
        "schema": {
          "type": "string"
        }
      },
      "X-Credit-Cost": {
        "description": "Credits charged for this response (billed responses only).",
        "schema": {
          "type": "integer"
        }
      },
      "X-Credit-Remaining": {
        "description": "Credits left after this charge (billed responses only).",
        "schema": {
          "type": "integer"
        }
      }
    }
  },
  "304": {
    "description": "The snapshot named by `If-None-Match` is still current; not billed"
  },
  "401": {
    "description": "Authentication is missing or invalid",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "402": {
    "description": "Not enough credits for this request",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "403": {
    "description": "The credential is valid but not allowed to call this operation",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "404": {
    "description": "The requested resource does not exist",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "422": {
    "description": "A parameter or the request body is invalid",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "429": {
    "description": "Too many requests to this endpoint; retry later",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "503": {
    "description": "The service is temporarily unavailable; retry later",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  }
}

Models

{
  "BatchItemOut": {
    "properties": {
      "market_hash_name": {
        "type": "string",
        "title": "Market Hash Name",
        "description": "Market hash name of the item, exactly as requested."
      },
      "markets": {
        "items": {
          "$ref": "#/components/schemas/MarketQuoteOut"
        },
        "type": "array",
        "title": "Markets",
        "description": "The item's quotes, at most one per market and side, sorted by market code and then side. Empty when the item is unknown or the filters exclude every quote."
      }
    },
    "type": "object",
    "required": [
      "market_hash_name",
      "markets"
    ],
    "title": "BatchItemOut",
    "description": "One requested item and its market quotes."
  },
  "CreditMeta": {
    "properties": {
      "cost": {
        "type": "integer",
        "title": "Cost",
        "description": "Credits this request costs."
      },
      "remaining": {
        "type": "integer",
        "title": "Remaining",
        "description": "Estimated credit balance left after this request. A hint rather than a ledger: concurrent requests can make it slightly off."
      }
    },
    "type": "object",
    "required": [
      "cost",
      "remaining"
    ],
    "title": "CreditMeta",
    "description": "Credit accounting for a billable request."
  },
  "ErrorBody": {
    "properties": {
      "code": {
        "type": "string",
        "title": "Code",
        "description": "Stable machine-readable error code. Branch on this value, not on `message`."
      },
      "message": {
        "type": "string",
        "title": "Message",
        "description": "Human-readable explanation. The wording may change."
      },
      "details": {
        "anyOf": [
          {
            "additionalProperties": true,
            "type": "object"
          },
          {
            "type": "null"
          }
        ],
        "title": "Details",
        "description": "Optional structured context, such as the list of validation errors or, for `credit_insufficient`, the required and remaining credits."
      }
    },
    "type": "object",
    "required": [
      "code",
      "message"
    ],
    "title": "ErrorBody",
    "description": "Details of a failed request."
  },
  "ErrorEnvelope": {
    "properties": {
      "error": {
        "$ref": "#/components/schemas/ErrorBody",
        "description": "What went wrong."
      },
      "meta": {
        "$ref": "#/components/schemas/Meta",
        "description": "Request metadata."
      }
    },
    "type": "object",
    "required": [
      "error",
      "meta"
    ],
    "title": "ErrorEnvelope",
    "description": "Error response: the error in `error` plus request metadata in `meta`."
  },
  "ExportOut": {
    "properties": {
      "app_id": {
        "type": "string",
        "title": "App Id",
        "description": "Steam app ID, echoed from the request."
      },
      "side": {
        "type": "string",
        "enum": [
          "ask",
          "bid",
          "mid",
          "all"
        ],
        "title": "Side",
        "description": "Side filter applied, echoed from the request."
      },
      "generated_at": {
        "type": "string",
        "title": "Generated At",
        "description": "When this export snapshot was built, in RFC 3339 UTC — the same value as the `X-Export-Generated-At` response header. Snapshots are rebuilt every few minutes; requests in between receive the same file."
      },
      "items": {
        "items": {
          "$ref": "#/components/schemas/BatchItemOut"
        },
        "type": "array",
        "title": "Items",
        "description": "Every item with at least one quote on the requested side, sorted by market hash name."
      }
    },
    "type": "object",
    "required": [
      "app_id",
      "side",
      "generated_at",
      "items"
    ],
    "title": "ExportOut",
    "description": "Every priced item of one game, for one side of the market."
  },
  "MarketQuoteOut": {
    "properties": {
      "market_code": {
        "type": "string",
        "title": "Market Code",
        "description": "Code of the marketplace this quote is for, for example `BUFF`. `CSCP` marks the cs.cheap valuation of the item: a weighted consensus across marketplaces in CNY, refreshed daily, with no quantity, its computation time in `changed_at` and `fresh_at`, and its details in `valuation`. It is an estimate, not an offer anyone can trade on."
      },
      "provider_code": {
        "type": "string",
        "title": "Provider Code",
        "description": "Code of the source the quote was collected from. Equals `market_code` when the data comes from the marketplace itself; otherwise it names an aggregator reporting that marketplace's prices."
      },
      "side": {
        "type": "string",
        "enum": [
          "ask",
          "bid",
          "mid"
        ],
        "title": "Side",
        "description": "`ask` for a sell-listing quote, `bid` for a buy-order quote, `mid` for the `CSCP` valuation (the midpoint of the sell and buy consensus)."
      },
      "market_currency_code": {
        "type": "string",
        "title": "Market Currency Code",
        "description": "Currency of `market_price_amount`, for example `CNY`. Prices are returned in the marketplace's own currency, without conversion."
      },
      "market_price_amount": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Market Price Amount",
        "description": "Price in `market_currency_code` as a decimal string (plain notation, trailing zeros trimmed, never scientific notation), or `null` when the source reports no price. A delisted quote keeps its last known price."
      },
      "quantity": {
        "anyOf": [
          {
            "type": "integer"
          },
          {
            "type": "null"
          }
        ],
        "title": "Quantity",
        "description": "Quantity on this side of the market as reported by the source, or `null` when not reported. `0` once the item has been delisted."
      },
      "is_quantity_minimum": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ],
        "title": "Is Quantity Minimum",
        "description": "`true` when `quantity` is a lower bound (the source only reports \"at least\" this many), or `null` when unknown."
      },
      "is_all_items_same_price": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ],
        "title": "Is All Items Same Price",
        "description": "`true` when every unit on offer is at `market_price_amount`; `false` when the source reports only the best price or the prices differ; `null` when unknown."
      },
      "changed_at": {
        "type": "string",
        "title": "Changed At",
        "description": "When the price or quantity of this quote last changed at the source, in RFC 3339 UTC (for example `2026-09-24T03:12:08Z`)."
      },
      "observed_at": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Observed At",
        "description": "When this quote was last seen individually at the source, in RFC 3339 UTC, or `null` when not recorded."
      },
      "delisted_at": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Delisted At",
        "description": "When the item was found to be no longer listed on this side of the market, in RFC 3339 UTC, or `null` while it is listed. A delisted quote keeps its last price, with `quantity` `0`."
      },
      "fresh_at": {
        "type": "string",
        "title": "Fresh At",
        "description": "When this quote was last confirmed current by the source, in RFC 3339 UTC: the latest of `changed_at`, `observed_at` and the completion of the last full scan of this market."
      },
      "valuation": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ValuationOut"
          },
          {
            "type": "null"
          }
        ],
        "description": "Valuation details, present only on the `CSCP` quote; `null` on every marketplace quote."
      }
    },
    "type": "object",
    "required": [
      "market_code",
      "provider_code",
      "side",
      "market_currency_code",
      "market_price_amount",
      "quantity",
      "is_quantity_minimum",
      "is_all_items_same_price",
      "changed_at",
      "observed_at",
      "delisted_at",
      "fresh_at",
      "valuation"
    ],
    "title": "MarketQuoteOut",
    "description": "One market's quote for an item, on one side of the market."
  },
  "Meta": {
    "properties": {
      "request_id": {
        "type": "string",
        "title": "Request Id",
        "description": "Unique identifier of this request, identical to the `X-Request-ID` response header. Quote it when contacting support."
      },
      "billable": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ],
        "title": "Billable",
        "description": "Whether the request is billed in credits. Present only on metered endpoints; `false` means the request is free, for example because it costs nothing or your subscription covers it."
      },
      "credit": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/CreditMeta"
          },
          {
            "type": "null"
          }
        ],
        "description": "Cost of the request and your estimated remaining balance. Present only when `billable` is `true`."
      }
    },
    "type": "object",
    "required": [
      "request_id"
    ],
    "title": "Meta",
    "description": "Request metadata included in every enveloped response."
  },
  "ValuationOut": {
    "properties": {
      "valuation_date": {
        "type": "string",
        "title": "Valuation Date",
        "description": "UTC date of the valuation (`YYYY-MM-DD`). It is computed once a day from the daily closing quotes of the seven days before this date."
      },
      "credibility": {
        "type": "number",
        "title": "Credibility",
        "description": "Confidence score between 0 and 1, equal to `e^(-uncertainty)`; the closer to 1, the more the sources agree. Set your own threshold before relying on the value."
      },
      "uncertainty": {
        "type": "number",
        "title": "Uncertainty",
        "description": "Standard uncertainty of the value on a logarithmic scale (0 or more). Roughly 68% of plausible values lie between price × `e^(-uncertainty)` and price × `e^(uncertainty)`."
      },
      "is_two_sided": {
        "type": "boolean",
        "title": "Is Two Sided",
        "description": "`true` when both sell listings and buy orders contributed. When `false`, only sell listings were available and the value is the sell-side consensus less a typical half-spread of comparable items."
      },
      "ask_amount": {
        "type": "string",
        "title": "Ask Amount",
        "description": "Weighted consensus of sell listings across marketplaces, as the cash cost of buying in CNY (fees included), as a decimal string."
      },
      "bid_amount": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Bid Amount",
        "description": "Weighted consensus of buy orders across marketplaces, as the cash received in CNY after fees, as a decimal string; buy orders priced above the market's sell listings are excluded. `null` when `is_two_sided` is `false`."
      },
      "ask_quote_count": {
        "type": "integer",
        "title": "Ask Quote Count",
        "description": "Number of sell-listing sources in `ask_amount`."
      },
      "bid_quote_count": {
        "type": "integer",
        "title": "Bid Quote Count",
        "description": "Number of buy-order sources in `bid_amount`."
      }
    },
    "type": "object",
    "required": [
      "valuation_date",
      "credibility",
      "uncertainty",
      "is_two_sided",
      "ask_amount",
      "bid_amount",
      "ask_quote_count",
      "bid_quote_count"
    ],
    "title": "ValuationOut",
    "description": "CSCP fair-value details of an item, from the latest daily valuation."
  }
}

Download the public OpenAPI schema