Basics
Rate limit, dates, pagination and errors.
These rules apply to all endpoints of the Data Export API.
Rate limit
Each token can send 300 requests per minute. Beyond that, the API answers with status 429. The Retry-After header tells you after how many seconds you can send the next request.
HTTP/1.1 429 Too Many Requests
Retry-After: 23
{ "message": "Too Many Attempts." }Dates
- Output: ISO 8601 in UTC, for example
2026-01-31T12:00:00.000000Z. - Input (
from,to): a date or a point in time. A plain date such as2026-01-31covers the whole day in UTC. Points in time with a time zone (2026-01-31T08:00:00+01:00) are converted to UTC. - Both bounds are inclusive.
tomust not be beforefrom.
Pagination
Lists are sorted by time in descending order (newest first) and are walked with a cursor. Follow the absolute URL in links.next until it is null.
| Parameter | Type | Description |
|---|---|---|
page[size] | Integer | Records per page, 1 to 100. Default: 50. |
page[cursor] | String | Cursor from links.next. Pass it on unchanged. |
from | Date | Only records from this point in time on. |
to | Date | Only records up to this point in time. |
Structure of every list:
{
"data": [ ... ],
"links": {
"first": "https://app.poll-hero.com/api/v1/surveys",
"prev": null,
"next": "https://app.poll-hero.com/api/v1/surveys?page%5Bcursor%5D=eyJ0IjoiMjAyNi0w..."
},
"meta": { "page_size": 50 }
}links.nextcontains all parameters of your request (filters, attributes, date range). You don't need to add them again.- Paging only goes forward:
links.previs alwaysnull. - A total number of records is not returned.
meta.page_sizeis the requested page size, not the number of records returned. - The cursor is an internal value. Don't build or change it yourself, otherwise the API answers with
422.
Boolean values
Parameters such as completed or include_deleted expect true or false. 1 and 0 work as well.
Errors
Errors always come back as JSON with a message field. For invalid parameters, errors holds the messages per parameter.
| Status | Meaning |
|---|---|
401 | The token is missing or invalid. |
403 | The plan of the account does not include API access. |
404 | Survey or response not found, or the token may not read it. Also returned for unknown paths. |
422 | Invalid parameters. |
429 | Rate limit exceeded. |
HTTP/1.1 422 Unprocessable Content
{
"message": "The page.size field must not be greater than 100.",
"errors": {
"page.size": ["The page.size field must not be greater than 100."]
}
}