GET/v1/markets/healthPUBLIC · NO KEY
/v1/markets/health
Public (no key) health for every integrated marketplace: status (live | warn | stale), last event time, listings count, and a 48-bucket health-bar series (48 × 30-minute buckets, ~24h; 2 = live, 1 = degraded, 0 = down). The id is the market join key.
The one fully public pricing-data endpoint, no key required. It returns every integrated marketplace with a status (live / warn / stale), a listingsCount, and a healthBars series for a quick sparkline of recent ingest health: 48 buckets of 30 minutes each (~24h), most recent last, where 2 = live, 1 = degraded, 0 = down.
id is the join key: pass it in the markets CSV on the other endpoints to scope a response to specific venues.
Parameters
No query parameters.
Response fields
MarketHealth[]Array, one entry per integrated marketplace. No key required.
idstring
Market id. The join key for other endpoints.statusstring
live | warn | stale.lastEventAtstring (date-time)nullable
Last ingested event; null if none yet.listingsCountinteger
Listings currently tracked for the market.healthBarsinteger[]
48 buckets of 30 minutes each (~24h), most recent last. Legend: 2 = live, 1 = degraded, 0 = down.Response 200
[
{
"id": "skinport",
"status": "live",
"lastEventAt": "2026-06-23T22:01:03.281Z",
"listingsCount": 3522487,
"healthBars": [
2,
2,
2,
2,
2,
2,
2,
2
]
}
]Errors
429Public rate limit exceeded (per browser-account or IP identity).
5xxHealth snapshot temporarily unavailable. Retry with backoff.
See alsoPer-market freshness
curl "https://pricing.skinpricer.com/v1/markets/health" \
-H "Authorization: ApiKey sk_live_•••••••••••"Response headers
X-RateLimit-Limit: <per-minute, set by your plan>
X-RateLimit-Remaining: <remaining this minute>
X-RateLimit-Reset: <seconds to reset>
X-Request-ID: req_xxxxxxxxxxxxxxxx