Oct 26, 2026 · Rotate a key (non-breaking)
Additive- Rotate key
New:
POST /v1/keys/rotateswaps your key for a new one with the same plan and today's usage. The old key stops working at once. Up to 5 rotations a day; not metered.
Changelog
What changed in the TrackPin API, and when. v1 changes are additive only: fields and parameters are added, never renamed or removed.
Early access.
New: POST /v1/keys/rotate swaps your key for a new one with the same plan and today's usage. The old key stops working at once. Up to 5 rotations a day; not metered.
The normal price (price.reference_cents) now counts each price for as long as it really held: until the next change, without time out of stock or our known data outages. "About a week" means 6.75 of the last 45 days. Verdicts, price.is_deal and price.discount_pct change for some products as a result: some former deals return to normal, and some missed deals appear.
A verdict now needs about two weeks of days on which the product had a price, not two weeks of calendar time, so products that were mostly out of stock show early.
history[] starts a new step when the product goes out of stock, so stats.price_levels can be higher. stats.avg_cents weighs each price by the time it really held. stats.distinct_prices counts prices within 1% of each other as one.
Deal lists use the corrected normal price and discount.
/v1/product adds price.changed_at, when the price became the current price, and price.checked_at, the latest check of the product we have on record. When price.checked_at is later than price.observed_at, the price wasn't on the listing at that check (out of stock or no offer).
/v1/product for a product we don't track yet now checks it on amazon.com and, when amazon.com lists it, starts tracking it: a 200 with today's price (price.source live; verdict early until we have about two weeks of prices), a live object and a new tracking object. Every plan, no live=1 needed.
Such a call counts as 1 request, whatever the outcome, also with live=1 on a plan that has live checks (on other plans live=1 is still a 403, and nothing is checked). It doesn't count toward the daily live-check cap.
When tracking can't start, the 404 not found adds tracking with status (not_listed, failed, unavailable, blocked or disabled) and reason, and a Retry-After header when asking again later may work.
New parameter discover (default 1). discover=0 keeps the previous answer for a product we don't track: 404 not found, without tracking.
Each key now has a per-minute ceiling on calls to product, deals and search, on top of its daily quota: Free 60, Pro 300, Business 1,200.
Search and deals also have their own ceilings: search 10 a minute on Free and 20 on Pro and Business; deals 30 a minute on Free and 60 on Pro and Business.
A call over a ceiling returns 429 rate limit exceeded with a Retry-After header, and the body adds limit, window_s and retry_after_s. It isn't counted against your daily quota.
/v1/usage stays free and doesn't count toward these ceilings. It has its own: 60 calls a minute.
/v1/product accepts live=1 (Pro and Business) and live_timeout_ms: the price is checked on amazon.com at request time and recorded into the price history. A call with live=1 counts as 5 requests, or 1 when the live check fails or can't run.
Live checks per key per day: 4,000 on Pro and 20,000 on Business, counting only checks that come back ok. Past that, live=1 returns the stored data with live.status unavailable and live.reason limit, and counts as 1.
Responses add price.source (live or stored). With live=1 they add a live object with the check's status, reason and reading, and a Server-Timing header.
live=1 with a key on a plan without live checks returns 403 live checks need a paid plan and isn't counted.
/v1/product adds verdict, listing_claim, category, category_label, in_stock, price.observed_at, stats.price_changes, stats.distinct_prices and stats.lowest_at.
New GET /v1/usage.
/v1/deals accepts the website's filters and a cursor; rows add verdict, category, in_stock, seen_at and listing_claim.
/v1/deals excludes suspected price errors unless include_suspect=1.
/v1/search accepts amazon.com links and adds price and verdict.
429 bodies add limit and used.