Public API · v1

Your catalogue and competitor data, one Bearer token away.

JSON over HTTPS. Cursor pagination. Tenant-scoped Bearer keys. The same data model that powers the dashboard is the data model your scripts and pipelines get.

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

Authentication

Every public endpoint accepts a tenant API key in the Authorization header. Generate one in Settings → API keys; the key inherits the scopes you tick when you create it. There is no separate verify endpoint — call any read endpoint and a 401 with code 'invalid_key' tells you the key is wrong.

GET/api/public/v1/productsBearer pk_live_…

Smoke-test your key by listing one product. A 200 confirms the key, scope, and tenant binding.

curl "https://api.priceroom.com/api/public/v1/products?limit=1" \
  -H "Authorization: Bearer pk_live_XXXXXXXX"
{
  "data": [
    {
      "id": "6630e1...",
      "sku": "WH-1000XM5",
      "title": "Sony WH-1000XM5",
      "brand": "Sony",
      "currency": "EUR",
      "ourPrice": 29900
    }
  ],
  "nextCursor": "6630e1...",
  "count": 1
}

Resources

Three resource families are exposed publicly. Each has a dedicated reference page with full request and response shapes.

GET/api-docs/products

Your catalogue — SKU, title, brand, category, our price, target price, images, custom attributes.

GET/api-docs/competitors

The retailers you track + their matched listings (CompetitorProduct rows linking SKUs to URLs).

GET/api-docs/observations

Time-series price history — every observed price + stock state per matched competitor listing.

Conventions

Predictable mechanics across every endpoint so your client stays simple.

GETPagination

Opaque cursor: pass nextCursor back as ?cursor=… until null. Default page size 50, max 200 (500 for observations).

GETMoney

All amounts are integer cents in the product's currency. Divide by 100 for display.

GETTimestamps

ISO 8601 in UTC. createdAt / updatedAt on every row, observedAt on every observation.

GETErrors

JSON body { error: { code, message } } with HTTP status 4xx/5xx. See full table below.

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..."
  }
}