---
title: "Latest observed shelf prices inside your coverage packages (SA-0158)"
method: GET
path: "/api/v1/public/catalog/observed-prices"
tags: ["ObservedPrices"]
---

# Latest observed shelf prices inside your coverage packages (SA-0158)

`GET /api/v1/public/catalog/observed-prices`

## Request

- Base URL: `https://api.shelfatlas.com`
- URL: `https://api.shelfatlas.com/api/v1/public/catalog/observed-prices`
- Auth: HTTP bearer

The B2B read behind Shelf Intelligence: the latest APPROVED shelf observation per product per store, limited to the coverage packages this API key has been granted (a package = a customer's stores × products, kept observed by the field team). A key without an active package gets 403 `no_coverage_package`. Only human observations — never catalog prices — and no reporter identity: `trust` is the source class (`partner`, `established`, `new`). Private, never cached.

## Query parameters

- `ean` string
- `store_id` string, uuid
- `since` string, date-time
- `limit` integer
- `offset` integer

## Response `200`

Latest observed price per (product, store) the key may see.

- object
  - `ok` true, required
  - `data` ObservedPrice[], required
    - `ean` string, required: EAN-8/13 as the package lists it.
    - `label` string, required: The package's human label for the product.
    - `store` object, required
      - `id` string, uuid, required
      - `name` string, required
      - `chainSlug` string, required
      - `chainName` string, required
      - `lat` number, required
      - `lng` number, required
    - `priceCents` integer, nullable, required: Shelf price in øre (DKK×100); null for a stock-only observation.
    - `stockStatus` 'in_stock' | 'low_stock' | 'out_of_stock', required
    - `observedAt` string, date-time, required: When the shelf was seen.
    - `trust` 'partner' | 'established' | 'new', required: Source class — a partner surface, a contributor with 5+ approved observations, or a newer contributor.
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `400`: Invalid parameters (`invalid_params`, `incompatible_params`).
- `401`: Missing, invalid, or revoked API key (`missing_api_key` / `invalid_api_key` / `revoked_api_key`).
- `403`: The key has no active coverage package (`no_coverage_package`).
- `429`: Rate limit or monthly limit reached (`rate_limited` / `monthly_limit_reached`).
- `503`: Temporary backend failure (`service_unavailable`).

---

[API](https://skmtc.dev/shelfatlas/apis/shelfatlas-catalog-api.md) · [All operations](https://skmtc.dev/shelfatlas/apis/shelfatlas-catalog-api/llms.txt) · [OpenAPI document](https://skmtc.dev/shelfatlas/apis/shelfatlas-catalog-api/revisions/943a8773856b?raw)
