cspriceapi-com Price History API

Historical listing prices per marketplace. Use `resolution=hourly` for up to ~100 days (≈24 points/day) or `resolution=daily` for the full daily series (1 point/day). Exactly one `market_hash_name` per request. **Plan: Enterprise**.

Operations 1

GET /v1/prices/{market}/history Get historical prices for one skin (Enterprise) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cspriceapi-com:cspriceapi-com-price-history-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cspriceapi-com-price-history-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CS Price Price History API
  version: 1.6.0
  description: 'Public price API for the CS2 (Counter-Strike 2) skin ecosystem.


    Latest listing prices are available via a single item-centric endpoint

    `GET` / `POST` `/v1/prices/latest` (optional `markets` filter). Use

    `/v1/prices/search` for one skin with Doppler phase expansion, plus

    buy-orders, float-ranged, price history, YouPin market-cap indexes and

    market-sales export.


    Subscription customers can additionally download a daily **ZIP export** of

    historical marketplace sales (`/v1/market-sales/export`) as three CSV files

    (sales, stickers, keychains) covering the last 24 hours.


    ## Subscription plans


    API access is grouped by plan. Higher tiers include all endpoints from lower

    tiers:


    | Plan | Included categories |

    |------|---------------------|

    | **Basic** | Listing Prices |

    | **Pro** | Basic + Buyorder Prices + Float Ranged |

    | **Enterprise** | Pro + Price History + Sales Data (full API access) |


    Each API key is issued for a specific plan and may be further restricted via

    endpoint ACL (`allowed_endpoints`).


    ## Authentication


    Every non-documentation endpoint requires an API key in the `x-api-key`

    request header. Keys are issued per customer and optionally scoped to a

    subset of endpoints (endpoint ACL). Every key is limited to 10 requests

    per second; there is no daily or monthly cap. Requests over the limit get

    `429` with a `Retry-After: 1` header.


    ## Response format stability


    All response shapes documented here reflect what the server **currently**

    returns. In particular:


    - Numeric fields for prices, percentage changes, averages and liquidity

    are serialized as **strings**, not numbers.

    Example: `"price_rmb": "7333.0000"`. Clients must parse them as

    fixed-point / arbitrary-precision decimals.

    - `stattrak` and `souvenir` are serialized as **integers** (`0` or `1`),

    not booleans.

    - `updated_at` is ISO-8601 UTC (`YYYY-MM-DDTHH:mm:ss.sssZ`).

    - `liquidity` is an internal liquidity score and may be `null` if

    unavailable for that skin.'
  contact:
    name: CS Price API Support
    url: https://cspriceapi.com
servers:
- url: https://api.cspriceapi.com
  description: Production
- url: http://localhost:8080
  description: Local development
security:
- ApiKeyAuth: []
tags:
- name: Price History
  description: 'Historical listing prices per marketplace. Use `resolution=hourly` for up

    to ~100 days (≈24 points/day) or `resolution=daily` for the full daily

    series (1 point/day). Exactly one `market_hash_name` per request.


    **Plan: Enterprise**.'
paths:
  /v1/prices/{market}/history:
    get:
      tags:
      - Price History
      summary: Get historical prices for one skin (Enterprise)
      description: 'Returns historical listing prices for **exactly one**

        `market_hash_name` on a given marketplace.


        | `resolution` | Source | Density | Typical retention |

        |--------------|--------|---------|-------------------|

        | `hourly` | `price_history_*` | up to 24 points/day (`slot`) | last ~100 days |

        | `daily` (default) | `price_daily_*` | 1 point/day | full history |


        Requesting `hourly` for a `from`/`to` window longer than **100 days**

        returns `400` — use `daily` for longer ranges.


        `youpin`, `buff163`, `c5game`, `skinport`, `skinbaron`, `market-csgo`,

        `csfloat`, `dmarket`, `ecosteam`, `lisskins`, `skinland`, `shadowpay`,

        `waxpeer`.


        Prices are decimal **strings** in the marketplace''s native currency

        (`currency` in the response): CNY / EUR / USD. CSFloat history is stored

        in USD cents and converted to USD for the response.'
      operationId: getMarketPriceHistory
      parameters:
      - name: market
        in: path
        required: true
        schema:
          type: string
          enum:
          - youpin
          - buff163
          - c5game
          - skinport
          - skinbaron
          - market-csgo
          - csfloat
          - dmarket
          - ecosteam
          - lisskins
          - skinland
          - shadowpay
          - waxpeer
        description: Marketplace slug (same as live price routes).
      - name: market_hash_name
        in: query
        required: true
        description: 'Steam `market_hash_name`. **Only one** name per request

          (no comma-separated lists, no repeated params).

          '
        schema:
          type: string
          minLength: 1
        example: AK-47 | Redline (Field-Tested)
      - name: resolution
        in: query
        required: false
        schema:
          type: string
          enum:
          - hourly
          - daily
          default: daily
        description: Point density. Defaults to `daily`.
      - name: from
        in: query
        required: false
        schema:
          type: string
          format: date
        description: 'Inclusive start date (`YYYY-MM-DD`). Defaults to 30 days before `to`

          for `hourly`, or 365 days before `to` for `daily`.

          '
      - name: to
        in: query
        required: false
        schema:
          type: string
          format: date
        description: Inclusive end date (`YYYY-MM-DD`). Defaults to today (UTC).
      responses:
        '200':
          description: Historical price series for the requested skin.
          headers:
            Cache-Control:
              schema:
                type: string
                example: public, max-age=60
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PriceHistoryResponse'
              examples:
                daily:
                  summary: Daily resolution
                  value:
                    market: youpin
                    market_hash_name: AK-47 | Redline (Field-Tested)
                    resolution: daily
                    currency: CNY
                    from: '2025-08-21'
                    to: '2026-08-21'
                    count: 2
                    data:
                    - day: '2025-08-21'
                      price: '210.5000'
                      count: 8421
                    - day: '2026-08-21'
                      price: '185.5000'
                      count: 11507
                    source: YouPin History
                    requestor: customer@example.com
                    plan: enterprise
                    timestamp: '2026-08-21T06:00:00.000Z'
                hourly:
                  summary: Hourly resolution
                  value:
                    market: youpin
                    market_hash_name: AK-47 | Redline (Field-Tested)
                    resolution: hourly
                    currency: CNY
                    from: '2026-07-22'
                    to: '2026-08-21'
                    count: 2
                    data:
                    - day: '2026-08-20'
                      slot: 10
                      last_ts: '2026-08-20 10:15:00'
                      price: '186.2000'
                      count: 11404
                    - day: '2026-08-20'
                      slot: 11
                      last_ts: '2026-08-20 11:15:00'
                      price: '186.2600'
                      count: 11420
                    source: YouPin History
                    requestor: customer@example.com
                    plan: enterprise
                    timestamp: '2026-08-21T06:00:00.000Z'
        '400':
          description: Invalid parameters or hourly range too long.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                multi:
                  value:
                    error: Only one market_hash_name is allowed per request
                hourlyTooLong:
                  value:
                    error: hourly resolution supports at most 100 days; use resolution=daily for longer ranges
                    from: '2025-01-01'
                    to: '2026-08-21'
                    days: 598
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Unknown marketplace slug.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  responses:
    RateLimited:
      description: Rate limit exceeded (10 requests per second per key). Retry after 1 second.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            example: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            perSecond:
              value:
                error: Rate limit exceeded (10 requests per second)
    InternalError:
      description: Internal server error – temporary upstream failure, etc.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            generic:
              value:
                error: Internal server error
            db:
              value:
                error: DB error
    Unauthorized:
      description: Missing, invalid, disabled or expired API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missing:
              value:
                error: Missing API key
            invalid:
              value:
                error: Invalid API key
            disabled:
              value:
                error: API key disabled
            expired:
              value:
                error: API key expired
    Forbidden:
      description: The API key is valid but is not allowed to call this endpoint (endpoint ACL).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            acl:
              value:
                error: Endpoint not allowed for this API key
  schemas:
    Error:
      type: object
      description: 'Current error envelope. A future release may add an optional

        `error_details` object next to `error`; the `error` string will

        remain for backwards compatibility.

        '
      properties:
        error:
          type: string
          description: Human-readable error message.
          example: Invalid API key
      required:
      - error
    PriceHistoryResponse:
      allOf:
      - $ref: '#/components/schemas/BaseWrapper'
      - type: object
        properties:
          market:
            type: string
            example: youpin
          market_hash_name:
            type: string
            example: AK-47 | Redline (Field-Tested)
          resolution:
            type: string
            enum:
            - hourly
            - daily
          currency:
            type: string
            enum:
            - CNY
            - EUR
            - USD
          from:
            type: string
            format: date
          to:
            type: string
            format: date
          count:
            type: integer
            example: 365
          data:
            type: array
            items:
              oneOf:
              - $ref: '#/components/schemas/PriceHistoryPointDaily'
              - $ref: '#/components/schemas/PriceHistoryPointHourly'
          source:
            type: string
            example: YouPin History
        required:
        - market
        - market_hash_name
        - resolution
        - currency
        - from
        - to
        - count
        - data
    PriceHistoryPointDaily:
      type: object
      properties:
        day:
          type: string
          format: date
          example: '2026-08-20'
        price:
          allOf:
          - $ref: '#/components/schemas/DecimalString'
          nullable: true
          example: '186.2000'
        count:
          type: integer
          nullable: true
          example: 11404
      required:
      - day
    DecimalString:
      type: string
      description: 'Fixed-point decimal value serialized as a string (preserves precision

        across languages). Parse with an arbitrary-precision decimal library;

        do **not** parse as a native float.

        '
      pattern: ^-?\d+(\.\d+)?$
      example: '1234.5600'
    BaseWrapper:
      type: object
      description: Envelope fields returned by every `GET /v1/prices/*` response.
      properties:
        source:
          type: string
          description: Human-readable marketplace identifier.
        requestor:
          type: string
          format: email
          description: Email address associated with the API key making the call.
          example: customer@example.com
        plan:
          type: string
          description: Plan of the API key (e.g. `free`, `pro`, `enterprise`).
          example: pro
        timestamp:
          allOf:
          - $ref: '#/components/schemas/UpdatedAt'
          description: Server time when this response was produced.
      required:
      - source
      - timestamp
    PriceHistoryPointHourly:
      type: object
      properties:
        day:
          type: string
          format: date
          example: '2026-08-20'
        slot:
          type: integer
          description: Hourly bucket index within the day (0–23).
          example: 10
        last_ts:
          type: string
          example: '2026-08-20 10:15:00'
        price:
          allOf:
          - $ref: '#/components/schemas/DecimalString'
          nullable: true
          example: '186.2000'
        count:
          type: integer
          nullable: true
          example: 11404
      required:
      - day
      - slot
    UpdatedAt:
      type: string
      format: date-time
      description: ISO-8601 UTC timestamp (millisecond precision).
      example: '2026-04-21T12:06:35.000Z'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API key issued per customer. Send it in the `x-api-key` header on every

        request. Every key is limited to 10 requests per second (no daily cap)

        and can be endpoint-scoped (ACL). Inactive or expired keys will be rejected

        with `401`.

        '