Rate limits & quotas
Skoup enforces two kinds of limits: rate limits, which protect the API from abuse, and business quotas, which come from your plan. Both are reported on every relevant response, so your integration never has to guess.
Rate limits
Limits are counted per API key:
| Limit | Value |
|---|---|
| Requests per minute | 120 |
| Requests per day | 20,000 |
Writes (POST, PATCH, DELETE) per minute | 50 |
Every response carries the current state of the limits:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1790150460
X-RateLimit-Daily-Limit: 20000
X-RateLimit-Daily-Remaining: 19842
X-RateLimit-Daily-Reset: 1790208000*-Reset values are Unix timestamps (seconds, UTC) at which the window starts over.
Beyond a limit, requests fail with 429
rate_limit_exceeded and a Retry-After header giving the
number of seconds to wait:
HTTP/1.1 429 Too Many Requests
Retry-After: 23Unauthenticated requests and requests with invalid keys are limited per IP address. Repeated authentication failures from the same address temporarily block it.
Need a higher limit? Contact us with your use case. Most integrations that hit the limit are polling — webhooks are usually the better tool.
Business quotas
Some resources are capped by your plan. The endpoints concerned report the quota in a
Skoup-Quota-{Name} header, formatted after the IETF RateLimit header fields:
Skoup-Quota-Queries: limit=150, remaining=12
Skoup-Quota-Verifications: limit=10, remaining=7, reset=1790208000
Skoup-Quota-Competitors: limit=5, remaining=2| Header | Sent on | Counts |
|---|---|---|
Skoup-Quota-Queries | …/queries | Active queries across all markets, against your plan’s quota. |
Skoup-Quota-Verifications | …/alerts/{id}/verify | Targeted re-samplings per brand and per day. |
Skoup-Quota-Competitors | …/competitors | Tracked competitor brands, all markets included. |
reset is only present when the quota frees up by itself over time. When a quota is reached, the
write fails with 422 quota_exceeded and param names the quota.