Troubleshooting¶
Common issues¶
| Symptom | Likely cause | Resolution |
|---|---|---|
401 invalid_token |
Expired or malformed credential | Refresh OAuth token or rotate API key. |
403 insufficient_scope |
Token lacks action scope | Reauthorize with the named scope. |
400 invalid_parameter |
Missing/invalid region |
Use an uppercase ISO region code. |
429 rate_limited |
Per-key or per-user quota exhausted | Honor Retry-After; add caching and backoff. |
WebSocket 4001 |
Authentication or heartbeat expired | Authenticate first; answer ping within 10 seconds. |
| Missing price | No active offer in requested region | Check /stores regions and offer availability. |
API and authentication diagnosis¶
Capture the response X-Request-Id, status, endpoint, and timestamp. Do not send credentials to support. Confirm sandbox keys use sandbox URL, production tokens have the correct audience, and the system clock is accurate.
WebSocket diagnosis¶
Wait for auth.ok before subscribing. Keep a resume checkpoint per channel and use REST reconciliation when the server reports resume_unavailable. Proxy configuration must allow WebSocket upgrades and an idle timeout above 35 seconds.
FAQ¶
Why does an offer differ from checkout? Store inventory, tax, eligibility, and merchant updates can change after an observation. Display observed_at and treat purchase_url as authoritative.
Can I scrape SteamDeals? Use the API within your plan and published rate limits. The website is not a bulk data interface.