/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.
listingsCount counts only listings within the market's max age (1 hour; 6 hours for steamcommunity), the same cutoff after which pricing and the NBBO drop a quote. A market whose crawl has paused reports 0 rather than its last known inventory. Rust rows on /v2/markets/health?game=rust keep counting observed inventory over 48 hours.
Parameters
No query parameters.
Response fields
live | warn | stale.steamcommunity). 0 when no listing is that fresh, for example while the market's crawl is paused.status, which only tracks the ingest heartbeat.2 = live, 1 = degraded, 0 = down.Errors
Guides using this endpoint
curl "https://api.skinpricer.com/v1/markets/health"// npm i @skinpricer/sdk
import { SkinpricerClient } from "@skinpricer/sdk";
const client = new SkinpricerClient({
apiKey: process.env.SKINPRICER_API_KEY!,
authScheme: "ApiKey",
});
const rows = await client.markets.health(); // keyless route
for (const m of rows) console.log(m.id, m.status);import requests
res = requests.get(
"https://api.skinpricer.com/v1/markets/health",
timeout=10,
)
res.raise_for_status()
print(res.json())[
{
"id": "skinport",
"status": "live",
"lastEventAt": "2026-06-23T22:01:03.281Z",
"listingsCount": 3522487,
"freshnessCoveragePct": 100,
"healthBars": [
2,
2,
2,
2,
2,
2,
2,
2
]
}
]