Making too many requests to the SafetyCulture API
To ensure the stability and security of our servers requests sent to the API by the same user simultaneously at a high rate will be throttled. In that case the API will return a 429 HTTP status code with an error message Too Many Requests.
Our rate limiting policy consists of a hard throttling limit
| Endpoint | Rate | Interval |
|---|---|---|
POST /users/search | 200 | 60 seconds |
GET /share/connections | 200 | 60 seconds |
POST /audits | 30 | 60 seconds |
GET /audits/search | 200 | 60 seconds |
GET /export_profiles/search | 200 | 60 seconds |
GET /templates/search | 200 | 60 seconds |
GET /response_sets | 200 | 60 seconds |
POST /audits/<audit ID>/export | 20 | 60 seconds |
GET /audits/<audit ID>/exports/<export ID> | 100 | 60 seconds |
GET /audits/<audit ID>/exports/<export ID>/<filename> | 100 | 60 seconds |
GET /preferences/search | 200 | 60 seconds |
POST /audits/{audit ID}/report | 200 | 60 seconds |
GET /audits/{audit ID}/report/{export ID} | 200 | 60 seconds |
POST /users/v1/users/upsert | 5 | 60 seconds |
POST /users/v1/users/upsert/jobs | 200 | 60 seconds |
POST /users/v1/users/upsert/jobs/{job_id} | 5 | 60 seconds |
DELETE /users/v1/users/upsert/jobs/{job_id} | 200 | 60 seconds |
GET /users/v1/users/upsert/jobs/{job_id} | 200 | 60 seconds |
POST /users/v1/users/upsert/jobs/list | 200 | 60 seconds |
GET /training/collections/v1 | 200 | 60 seconds |
GET /training/collections/v1/{collection ID}/courses | 200 | 60 seconds |
GET /training/courses/v1 | 200 | 60 seconds |
GET /training/courses/v1/{course ID}/lessons | 200 | 60 seconds |
PUT /training/courses/v1/{course ID}/assignments | 200 | 60 seconds |
GET /training/paths/v1 | 200 | 60 seconds |
GET /training/paths/v1/{path ID} | 200 | 60 seconds |
GET /training/individualleaderboards/v1 | 200 | 60 seconds |
GET /training/individualleaderboards/v1/rankings | 200 | 60 seconds |
GET /training/rapid-refresh/v1 | 200 | 60 seconds |
GET /training/rapid-refresh/v1/{id} | 200 | 60 seconds |
GET /training/analytics/v1/lessons/attempts | 200 | 60 seconds |
GET /training/analytics/v1/courses/statistics | 200 | 60 seconds |
GET /training/analytics/v1/lessons/progress/events | 200 | 60 seconds |
GET /training/analytics/v1/lessons/statistics | 200 | 60 seconds |
GET /training/analytics/v1/slides/statistics | 200 | 60 seconds |
GET /training/analytics/v1/users/{user_id}/slides/statistics | 200 | 60 seconds |
GET /training/analytics/v1/users/{user_id}/lessons/progress | 200 | 60 seconds |
GET /training/analytics/v1/users/{user_id}/lessons/progress/events | 200 | 60 seconds |
GET /training/analytics/v1/surveys/questionDefinitions | 200 | 60 seconds |
GET /training/analytics/v1/surveys/answers | 200 | 60 seconds |
GET /training/analytics/v1/rapidRefresh/answers | 200 | 60 seconds |
| Other | 800 | 60 seconds |
Rate limit response headers
All responses sent from the API will include headers which can be used to help manage the rate which requests are being sent to the API.
| Header | Description |
|---|---|
x-ratelimit-limit | The rate limit credit for that given endpoint |
x-ratelimit-remaining | The number of requests left for the window |
x-ratelimit-reset | The number of seconds until this window resets |