Skip to main content

Core concepts

Pagination

List endpoints page with a keyset cursor rather than page numbers, and cap each response at 100 items. Results are ordered newest-first by update time.

On this page

Keyset cursors

List endpoints use a keyset cursor rather than page numbers, and are capped at 100 items per response (server-enforced; there is no limit parameter).

To fetch the next page, pass the since and after values taken from the last item of the previous page:

  • since — an ISO 8601 local date-time, e.g. 2026-01-15T10:30:00. Do not include a Z suffix or a numeric UTC offset; both are rejected with 400.
  • after — the id of the last item from the previous page.

Results are ordered newest-first by update time.

No limit parameter

The 100-item cap is enforced server-side and cannot be raised or lowered. Keep requesting pages until one comes back empty, rather than stopping at the first page shorter than 100 items.

Cursor parameters

NameInTypeRequiredDescription
sincequerystringOptionalKeyset cursor — ISO 8601 local date-time of the last item from the previous page. No Z suffix and no numeric offset; both are rejected with 400.Example: 2026-01-15T10:30:00
afterquerystringOptionalKeyset cursor — envelope id of the last item from the previous page. Pair with since.Example: env_xyz789

Take both values from the last item of the page you just read, then request again:

Next page
curl "https://api-uat.softsages.com/core/api/v1/inkfree/envelopes?since=2026-01-15T10:30:00&after=env_xyz789" \
  -H "X-API-Key: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Reformat the timestamp before using it as a cursor

The cursor you send and the timestamp you received are not in the same format. since takes 2026-01-15T10:30:00, but an envelope's updatedOn comes back as 01/15/2026 10:30:00, and event_time comes back as 2026-01-15T10:30:00Z.

Convert MM/dd/yyyy HH:mm:ss to yyyy-MM-ddTHH:mm:ss, or strip the trailing Z, before sending it back. Passing either value through unchanged returns 400. See Dates.

Dates and time zones

Request parameters use ISO 8601 local date-times (2026-01-15T10:30:00). The since cursor is parsed strictly in this form — a Z suffix or a numeric offset is rejected with 400.

Response bodies are not uniform. Parse per field rather than assuming one format:

FieldFormatExample
createdOn, updatedOn, scheduleTime on an envelope or templateMM/dd/yyyy HH:mm:ss03/15/2026 09:00:00
expires_on from GET /api/v1/inkfree/meMM/dd/yyyy HH:mm:ss01/01/2027 00:00:00
nextAttemptAt, lastAttemptAt on a webhook deliveryMM/dd/yyyy HH:mm:ss03/15/2026 14:30:00
event_time on the envelope event feedISO 8601 UTC offset2026-03-15T14:30:00Z

The request and response forms deliberately differ, which matters when paging: you cannot feed an envelope's updatedOn straight back as a since cursor. Convert MM/dd/yyyy HH:mm:ss to yyyy-MM-ddTHH:mm:ss first. Likewise, strip the Z from event_time before using it as a cursor.

No Z suffix, no offset

since takes an ISO 8601 local date-time — 2026-01-15T10:30:00. A trailing Z or a numeric UTC offset is rejected with 400.

Most date libraries serialize to the offset form by default. If you are passing a value straight from one, trim it before sending.

Endpoints that paginate

3 list endpoints accept cursors. All return results newest-first by update time.