Get sealed price history
One sealed product's price over time, on one marketplace.
Points are dense, as a card's are: every day carries the last reading forward, so a flat run is a price that did not move. A product first priced inside the range starts on that day.
Both marketplaces are read daily from the day a product is listed, 18 October 2026 at the earliest. Products TCGplayer quoted on that day have their TCGplayer series filled a year further back from TCGplayer's own price chart: a reading every day for the last month, every three days for the two months before, and weekly before that, each held forward until the next. Those older points carry market only; low is null.
Amounts are market and low in major units of the source's currency: USD on TCGplayer, EUR on Cardmarket.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| idrequired | string | A sealed product id. |
Query parameters
Any other query parameter is a 400 naming it and listing these, so a misspelt one is never silently ignored. api_key is accepted on every endpoint as an alternative to the header.
| Parameter | Type | Description |
|---|---|---|
| source | string | The marketplace. Case-insensitive. meta.sources lists every series held for the product.One of: Default: tcgplayer, or cardmarket for a product TCGplayer does not sell |
| interval | string | Point spacing. Weeks run Monday to Sunday and months are calendar months, UTC. A WEEK or MONTH point is the bucket's last day inside the range, with the price held on that day. Case-insensitive.One of: Default: |
| from | string | First day, YYYY-MM-DD, inclusive.Default: |
| to | string | Last day, YYYY-MM-DD, inclusive. At most 1,826 days after from.Default: today, UTC |
Response
200 The series.
| Field | Type | Description |
|---|---|---|
| data | object | The series. |
| data.sealedId | string | The product's id. |
| data.source | string | The marketplace used. One of: |
| data.interval | string | The spacing used. One of: |
| data.points | object[] | Oldest first. |
| data.points[].day | string | YYYY-MM-DD: the day, or the last day of the week or month inside the range. |
| data.points[].market | number | null | The headline price that day. |
| data.points[].low | number | null | The low that day. |
| data.points[].currency | string | The currency. One of: |
| meta | object | The range and what else exists. |
| meta.from | string | The first day used. |
| meta.to | string | The last day used. |
| meta.count | integer | Points returned. |
| meta.sources | string[] | Every marketplace with a series for this product, longest first. One of: |
| meta.note | string | How to read the points. |
Examples
Real responses from the production API, recorded on 2026-10-05 by the script that also checks every field above against them. Arrays are shown in full.
Errors
Every error has the same body; switch on error.code. Any endpoint can also answer 401, 402, 403 or 429 for reasons of key, plan or rate; those are on Errors.
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | A date that is not YYYY-MM-DD, from after to, or a range over 1,826 days. |
| 400 | invalid_request | A source or interval outside its list, or a parameter this endpoint does not take. |
| 404 | not_found | No sealed product has that id. |