Rate limits & errors
Rate limits
Each ingestion endpoint is rate-limited. Defaults:
| Endpoint | Limit | Counted per |
|---|---|---|
POST /api/collect | 600 / minute | Visitor IP |
POST /api/v1/events | 1,200 / minute | API key |
POST /api/identify | 120 / minute | API key |
Exceeding a limit returns 429 Too Many Requests. Spread bursts out or batch
where you can.
These are defaults. If you self-host Snow, your operator can tune them with environment variables, so your instance’s limits may differ.
Error format
The authenticated endpoints return a JSON error envelope:
{
"status": "error",
"error": {
"code": 400,
"message": "Invalid event name"
}
}Common status codes across the APIs:
| Status | Meaning |
|---|---|
400 Bad Request | The request was malformed or a field failed validation. |
401 Unauthorized | Missing or invalid API key. |
403 Forbidden | The key isn’t allowed to act on that site. |
404 Not Found | No matching site (for /api/collect). |
429 Too Many Requests | Rate limit exceeded. |
/api/collect responds with status codes only (204 on success,
with no body), since it’s called by the browser snippet.