Price history: GET /api/v1/products/{id}/price-history
GET /api/v1/products/{id}/price-history returns the daily lowest price across all retailers and a daily series per retailer, for the last 7 to 180 days (default 90). Use it to decide whether today's price is a genuine low. Costs 1 credit.
GET https://cart-route.com/api/v1/products/{id}/price-history?days=90
Which parameters does it take?
| Name | Type | Default | Description |
|---|---|---|---|
id (path) | string | Product id, slug, GTIN or MPN. | |
days | integer 7–180 | 90 | Window length, ending today. |
What does the response look like?
{
"object": "price_history",
"data_source": "sandbox",
"history": {
"object": "price_history",
"product_id": "prd_0dophw3",
"title": "Sony WH-1000XM6 Wireless Noise Cancelling Headphones",
"days": 30,
"currency": "USD",
"lowest_by_day": [
{
"date": "2026-08-25",
"price_usd": 369.99
},
{
"date": "2026-08-26",
"price_usd": 364.99
}
],
"by_retailer": [
{
"retailer_id": "amazon",
"retailer_name": "Amazon",
"points": [
{
"date": "2026-08-25",
"price_usd": 379.99
}
]
}
]
},
"credits": {
"charged": 1,
"remaining": 197
}
}
Truncated: a 30-day response has 30 entries in lowest_by_day and in each retailer's points.
How should an agent read it?
- Is today a low? Compare today's
lowest_by_dayvalue with the minimum of the series. Search and product responses already do this for 90 days inprice_insight.verdict; call this endpoint when the user wants the evidence or a different window. - Which retailer discounts?
by_retailershows who ran promotions and how deep they went. - Should I wait? A series that dipped 15 to 20% several times in 90 days suggests another promotion is likely; a flat series suggests the price is structural.
Which errors can it return?
404 not_found for an unknown product and 422 validation_error for days outside 7–180 (neither is charged), plus 401, 402 and 429.