Public API · Observations

Every observed price, with a timestamp.

A flat, time-series feed of every competitor-listing observation we've recorded for your tenant. Filter by product, competitor, and date range; page with limit; chart it.

Base URL
api.priceroom.com/api/public/v1
Format
application/json
Auth
Bearer token
Rate limit
600 req/min/key

Read observations

Each row is one observed price for one competitor's matched listing at one point in time. Use this to back-test pricing rules, build dashboards, or feed your own data warehouse.

GET/api/public/v1/observationsBearer pk_live_…

List observations across the tenant. Filter by product, competitor, and ISO date range.

Body
Query: productId?, competitorId?, from? (ISO 8601), to? (ISO 8601), limit? (1–500, default 100)
Returns
{ data: Observation[], count: number, total: number } — Observation = { competitorProductId, productId, competitorId, url, price, stock, observedAt }
curl "https://api.priceroom.com/api/public/v1/observations?productId=6630e1...&from=2026-05-01T00:00:00Z&limit=200" \
  -H "Authorization: Bearer pk_live_XXXXXXXX"
{
  "data": [
    {
      "competitorProductId": "6712a3...",
      "productId": "6630e1...",
      "competitorId": "65f1b2...",
      "url": "https://amazon.de/dp/B09XS7JWHH",
      "price": 28900,
      "stock": true,
      "observedAt": "2026-05-31T11:42:00.000Z"
    }
  ],
  "count": 1,
  "total": 1
}

Filter shapes

All filters are AND-combined. Omit any filter to widen the result set; pair filters to drill into a single SKU on a single retailer.

GET?productId=<id>

Restrict to one of your products. Get the id from /api/public/v1/products.

GET?competitorId=<id>

Restrict to observations on one retailer. Get the id from /api/public/v1/competitors.

GET?from=&to=

ISO 8601 timestamps. Inclusive on both sides. Pair with productId to chart a SKU over time.

GET?limit=N

1–500. Default 100. Page through history by combining limit with a tightening to= window.

Field reference

Every Observation has the same shape regardless of which retailer or category it came from.

GETprice

Integer cents in the matched competitor product's currency (usually the tenant default, EUR for European deployments).

GETstock

Boolean — true when the competitor's listing was in stock at the time of observation, false when out of stock.

GETobservedAt

ISO 8601 UTC. The moment the scraper recorded the price, not the moment the retailer changed it.

GETurl

The exact competitor listing URL the price was read from — useful for audit trails or manual verification.

Errors

Every 4xx/5xx returns a stable JSON error. Use code for programmatic branching.

{
  "error": {
    "code": "invalid_api_key",
    "message": "The provided API key is invalid or revoked.",
    "requestId": "req_01HTX9..."
  }
}