Every route is prefixed with /v1/public. The version number only changes on a breaking change: adding a field to a response isn't one, so your integration must ignore fields it doesn't know about.
https://api.skinlooters.com/v1/public
Authentication
Every request must carry your key in the X-Api-Key header. It's emailed to you once the subscription is confirmed, and stays visible (and rotatable) from your backoffice.
The key is a password: call the API from your server, never from a web front-end or a mobile app where it would be readable. If it leaks, rotate it from the backoffice — the old one is revoked immediately.
Quotas and limits
The quota is daily and resets at midnight UTC. Every response carries the current counter state:
Field
Type
Description
X-RateLimit-Limit
integer
Your plan's daily quota.
X-RateLimit-Remaining
integer
Calls left for the current UTC day.
Past it, the API replies 429. Over-quota calls still count: retrying in a loop won't unblock anything before the reset.
Pagination
The list is paginated with page (1 to 1000) and limit (1 to 100, 30 by default). Out-of-range values are clamped to the nearest bound rather than rejected, and the total number of matching items comes back in total. To walk a whole catalog, iterate page until you have covered total.
Prices and currencies
All prices are integers in cents, never floats — 2439 means 24.39. best_price is in the offer's native currency (best_currency); on a skin's detail, each offer also carries price_usd_cents, converted at the current rate, so you can compare offers across currencies without redoing the conversion.
Endpoints
GET/v1/public/skins
List and search skins
The paginated, filtered and sorted catalog. Only skins with at least one active offer are returned.
A time series per marketplace. Points under 30 days old come back raw (one point per reading); older ones are averaged to one point per marketplace per day, so a 90-day window stays plottable instead of returning thousands of points.
category, wear and stattrak are CS2-specific notions: on the other games those filters match nothing.
Errors
Code
Body
Description
401
{"error":"missing_api_key"}
The X-Api-Key header is missing.
401
{"error":"invalid_api_key"}
Unknown, revoked or disabled key.
404
{"error":"not_found"}
No skin matches that slug.
429
{"error":"quota_exceeded"}
Daily quota exceeded, retry after midnight UTC.
Data freshness
Offers are re-ingested continuously; updated_at on each offer says exactly when that row was last checked. There's no point polling the same skin more often than every few minutes — the response won't move and the request still counts against your quota.
Support
A question, a missing field, or volume needs beyond the Pro plan? hello@skinlooters.com