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

Every list
{
  "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_cursor is 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

ParameterMeaning
limitRows per page, 1 to 100. Default 25.
cursorThe next_cursor from the previous page. Omit it for the first page.
First page
curl "https://production-engine.com/api/v1/projects?limit=50" \
  -H "Authorization: Bearer $PE_TOKEN"
Next page
curl "https://production-engine.com/api/v1/projects?limit=50&cursor=NEXT_CURSOR_FROM_THE_LAST_PAGE" \
  -H "Authorization: Bearer $PE_TOKEN"

Filters

ParameterMeaningOn
statusOnly rows with this status. The allowed values are listed on each endpoint.GET /projects, GET /projects/{id}/deliverables
updated_sinceOnly 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.