> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cromos.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Get price snapshots

> The newest published price file for cards and for sealed products.

The newest snapshot of each kind, `cards` and `products`, in the same six-field shape a
`pokemon.card_prices.snapshot` or `pokemon.product_prices.snapshot` delivery carries: `url`,
`sha256` and `bytes` for the file, `rows` and `subjects` for what it holds. `null` for a kind
nothing has published yet.

Call it to bootstrap a mirror without waiting for a delivery, or to pick up a snapshot whose
delivery you missed. See [Price snapshots](/webhooks/snapshots) for the file format, how to
verify a download, and how to apply one.

Fetching the file a manifest names costs nothing against your rate limit: it lives on
`assets.cromos.so`, outside `/v1`. This call itself is one ordinary `/v1` request.


## OpenAPI

````yaml openapi.json GET /v1/prices/snapshots
openapi: 3.0.0
info:
  title: Cromos API
  version: 1.0.0
servers:
  - url: https://api.cromos.so
security:
  - bearerAuth: []
paths:
  /v1/prices/snapshots:
    get:
      tags:
        - Prices
      summary: Get current price snapshots
      description: >-
        The newest published price snapshot for cards and for sealed products.
        Each names a gzipped NDJSON file holding every current price, one row
        per line. Fetch the file rather than reading prices card by card: it is
        a static asset and costs no rate-limit budget. `null` for a kind nothing
        has been published for yet.
      operationId: getPriceSnapshots
      responses:
        '200':
          description: Current snapshots
          headers:
            ETag:
              description: >-
                A strong validator over the response body. Send it back as
                `If-None-Match` to get a `304 Not Modified` when nothing has
                changed.
              schema:
                type: string
            RateLimit:
              description: >-
                Remaining budget in the current window, RFC 9239 draft-7 form:
                `limit=300, remaining=284, reset=41`. `reset` is seconds until
                the window rolls.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                The policy the budget above is drawn from. `300;w=60` is 300
                requests a minute.
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PriceSnapshots'
                  error:
                    type: object
                    nullable: true
                required:
                  - data
                  - error
              example:
                data:
                  cards:
                    snapshot_date: '2026-08-18'
                    rows: 148433
                    subjects: 20307
                    url: https://assets.cromos.so/prices/cards/2026-08-18.ndjson.gz
                    sha256: >-
                      e75a04522548a4dbda3ae35cffcc4a96c51973af38311db0cbab05bd1ef5045c
                    bytes: 1624758
                  products:
                    snapshot_date: '2026-08-18'
                    rows: 2323
                    subjects: 2323
                    url: >-
                      https://assets.cromos.so/prices/products/2026-08-18.ndjson.gz
                    sha256: >-
                      e452dbb5a73d3c409fa7a57625c19ca977c70ccc2bd1dca7f87f6110c09d1545
                    bytes: 31900
                error: null
        '304':
          description: >-
            Not modified. The `If-None-Match` you sent still matches, and there
            is no body.
          headers:
            ETag:
              description: >-
                A strong validator over the response body. Send it back as
                `If-None-Match` to get a `304 Not Modified` when nothing has
                changed.
              schema:
                type: string
            RateLimit:
              description: >-
                Remaining budget in the current window, RFC 9239 draft-7 form:
                `limit=300, remaining=284, reset=41`. `reset` is seconds until
                the window rolls.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                The policy the budget above is drawn from. `300;w=60` is 300
                requests a minute.
              schema:
                type: string
        '401':
          description: Unauthorized
          headers:
            ETag:
              description: >-
                A strong validator over the response body. Send it back as
                `If-None-Match` to get a `304 Not Modified` when nothing has
                changed.
              schema:
                type: string
            RateLimit:
              description: >-
                Remaining budget in the current window, RFC 9239 draft-7 form:
                `limit=300, remaining=284, reset=41`. `reset` is seconds until
                the window rolls.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                The policy the budget above is drawn from. `300;w=60` is 300
                requests a minute.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limited
          headers:
            ETag:
              description: >-
                A strong validator over the response body. Send it back as
                `If-None-Match` to get a `304 Not Modified` when nothing has
                changed.
              schema:
                type: string
            RateLimit:
              description: >-
                Remaining budget in the current window, RFC 9239 draft-7 form:
                `limit=300, remaining=284, reset=41`. `reset` is seconds until
                the window rolls.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                The policy the budget above is drawn from. `300;w=60` is 300
                requests a minute.
              schema:
                type: string
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal error
          headers:
            ETag:
              description: >-
                A strong validator over the response body. Send it back as
                `If-None-Match` to get a `304 Not Modified` when nothing has
                changed.
              schema:
                type: string
            RateLimit:
              description: >-
                Remaining budget in the current window, RFC 9239 draft-7 form:
                `limit=300, remaining=284, reset=41`. `reset` is seconds until
                the window rolls.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                The policy the budget above is drawn from. `300;w=60` is 300
                requests a minute.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    PriceSnapshots:
      type: object
      properties:
        cards:
          $ref: '#/components/schemas/PriceSnapshot'
        products:
          $ref: '#/components/schemas/PriceSnapshot'
      required:
        - cards
        - products
    ErrorResponse:
      type: object
      properties:
        data:
          type: object
          nullable: true
        error:
          $ref: '#/components/schemas/ApiError'
      required:
        - data
        - error
    PriceSnapshot:
      type: object
      nullable: true
      properties:
        snapshot_date:
          type: string
          description: >-
            The UTC date this snapshot was taken. Not an observation date: rows
            carry their own `observed_on`.
        rows:
          type: integer
          description: Price rows in the file.
        subjects:
          type: integer
          description: Distinct cards, or sealed products, represented.
        url:
          type: string
          format: uri
          description: >-
            The gzipped NDJSON file. A static asset: fetching it costs no
            rate-limit budget.
        sha256:
          type: string
          description: Digest of the gzipped bytes, to verify the download.
        bytes:
          type: integer
          description: Size of the gzipped file.
      required:
        - snapshot_date
        - rows
        - subjects
        - url
        - sha256
        - bytes
    ApiError:
      type: object
      properties:
        code:
          type: string
          description: A stable machine-readable token. Switch on this, not on `message`.
        message:
          type: string
          description: A human-readable sentence. Always present, never empty.
      required:
        - code
        - message
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````