Developers
Pagination and filters
Every list endpoint answers one page at a time, newest first, with a cursor for the next page.
The list shape
{
"data": [ ... ],
"next_cursor": "eyJjIjoiMjAyNi0xMC0wMVQxNTowMDowMC4wMDBaIiwiaSI6ImNtX3Byb2oifQ"
}- Rows are ordered by when they were created, newest first. Rows made in the same millisecond keep one fixed order.
next_cursoris null on the last page. An empty list is{"data": [], "next_cursor": null}, never an error.- The cursor is opaque. Send it back as you got it; a cursor this API did not return answers 422.
Paging parameters
| Parameter | Meaning |
|---|---|
limit | Rows per page, 1 to 100. Default 25. |
cursor | The next_cursor from the previous page. Omit it for the first page. |
curl "https://production-engine.com/api/v1/projects?limit=50" \
-H "Authorization: Bearer $PE_TOKEN"curl "https://production-engine.com/api/v1/projects?limit=50&cursor=NEXT_CURSOR_FROM_THE_LAST_PAGE" \
-H "Authorization: Bearer $PE_TOKEN"Filters
| Parameter | Meaning | On |
|---|---|---|
status | Only rows with this status. The allowed values are listed on each endpoint. | GET /projects, GET /projects/{id}/deliverables |
updated_since | Only rows changed at or after this ISO 8601 instant, e.g. 2026-10-01T00:00:00Z. Use it to sync changes since your last run. | GET /projects, GET /projects/{id}/shoot-days, GET /projects/{id}/deliverables, GET /clients, GET /contacts |
A parameter an endpoint does not take answers 422 with invalid_parameter, and so does a parameter given twice. See REST errors.