Skip to main content
Uses: Python · TypeScript · CLI · REST API
List endpoints are offset-based. Ask for a page with offset and top, and read totalCount to know when you’re done.
cURL samples assume BASE=https://api.engini.io/v1 and AUTH="x-api-key: $ENGINI_API_KEY" - the setup from the REST walkthrough. Manual paging is a REST-only concern: the SDKs and the CLI page for you, which is why their tabs below are one-liners.

The loop

Terminate on both conditions - an empty page and offset >= totalCount. Checking only totalCount can loop forever if a page comes back short; checking only emptiness costs an extra request every time.

Defaults worth knowing

Connections defaulting to 25 catches people out - a naive single request looks like the full list when it isn’t.

Filter before you page

Almost always faster than walking everything:
?search= runs a semantic search and is billed against a separate, stricter rate-limit budget than ordinary reads. It’s the right tool for “find me something like X”, but don’t put it inside a pagination loop - filter with applicationSlug or name there instead.

Rate limits while paging

Two budgets apply per account - a per-second burst and an hourly window. A tight loop over a large catalog can trip the burst, so handle 429 rather than assuming it won’t happen:
Retry-After is in seconds: about 1 when the burst window trips, 3600 when the hourly one does. The difference matters - a one-second pause and an hour-long wait deserve very different handling. In the SDKs the same 429 surfaces as a typed EnginiRateLimitError - neither SDK retries for you, by design. See SDK errors & pagination for the retry pattern.