kamarvo

API

Kamarvo’s used prices as JSON. Read-only, and every figure is Kamarvo’s own, worked out from what shops list and sell. Access is by key; to ask for one, write to the address on the About page.

Authentication

Send the key with every request, as Authorization: Bearer cp_… or X-API-Key: cp_…. Keys are for servers: never put one in a web page. Each key has a limit per minute (120 unless agreed otherwise); over it, the answer is 429 with Retry-After.

Slugs

A model is addressed by its slug, the same one as its page: /model/sony-a7-iv. Where the model is in Sharply’s catalogue, the slug is Sharply’s, so a Sharply slug can be used as it is. A slug a model had before still answers, with the current one in slug.

GET /api/v1/models/<slug>

One model. 404 if Kamarvo has no such model.

{
  "currency": "EUR",
  "rates_as_of": "2026-10-09",
  "model": {
    "slug": "sony-a7-iv",
    "sharply_slug": "sony-a7-iv",
    "url": "https://kamarvo.com/model/sony-a7-iv",
    "name": "Sony A7 IV",
    "brand": "Sony",
    "kind": "camera",
    "mount": "Sony E",
    "estimate": {"cents": 159900, "basis": "sold", "sold_share": 0.74, "sample": 15,
                 "thin": false, "change_28d_pct": -2.4},
    "asking": {"median_cents": 159900, "for_sale": 16},
    "sales": {"total": 9, "last_30_days": 3, "median_days_to_sell": 11.0},
    "updated_at": "2026-10-09T05:12:40Z"
  }
}

GET /api/v1/models

Every model with at least one figure, in slug order, per_page at a time (500 by default, at most 1000): page, pages, total and models. ?sharply=1 keeps only models linked to a Sharply item. Figures change once a night, so the answer carries an ETag; send it back as If-None-Match and an unchanged page costs a 304.

Fields

Amounts are integers in cents (the currency’s minor unit). Every model takes ?currency= EUR (default), GBP, USD, PLN, CZK or DKK, converted at the European Central Bank’s rate of rates_as_of.

estimate is the price Kamarvo would quote, or null: recent sales blended with the median asking price (in which no shop counts for more than a third). Each sale counts less the older it is; sold_share is the part the sales carry, 0 with none recent, 0.5 with five. basis says which side carries more, and sample how many units stand on that side; thin is true under 5 — show it as a guide, not a market price. Parts-only and new units are never in it.

estimate.change_28d_pct: how the estimate moved in four weeks (only when 10 or more units were for sale at both ends). asking: what is for sale now. sales: units seen to sell, and the median days they were listed.

Attribution

Where a figure is shown, name Kamarvo and link the model’s url.