SalesOS

Requests, pagination and filtering

The list contract shared by every collection endpoint.

Format

  • Request and response bodies are JSON (Content-Type: application/json), UTF-8.
  • Timestamps are ISO 8601 in UTC, for example 2026-10-01T09:30:00.000Z.
  • Money is a JSON number in the record's currency.
  • IDs are opaque strings. Don't parse them.
  • Most endpoints reject unknown body fields with 400, so typos fail loudly rather than being ignored.

Pagination

Collection endpoints (GET /v1/leads, /contacts, /accounts, /opportunities, /tasks, /quotes, /orders, /activities, /cases, …) are offset-paginated:

ParameterDefaultNotes
page11-based
limit50Capped at 200
{
  "data": [ ... ],
  "page": 2,
  "limit": 50,
  "total": 1234,
  "totalPages": 25,
  "hasMore": true
}

Walk a collection by incrementing page until hasMore is false. Leads also return nextCursor; pass it back as cursor for stable infinite scrolling.

Sorting

ParameterValues
sortByA field the endpoint allows, for example createdAt, updatedAt, name, amount, closeDate
sortOrderasc or desc

Each endpoint has an allow-list of sortable fields. A field outside it falls back to the endpoint's default order instead of failing.

Filtering

Each endpoint documents its own filters in the reference, for example status, stage, accountId or ownerId. Leads, contacts, accounts, opportunities and tasks also share:

ParameterMeaning
searchFree-text match on the record's name, email and similar fields
owner=meOnly records you own
open=trueOnly open records (not converted, closed or completed)
createdAfterISO date; only records created on or after it
idsComma-separated IDs

Filters only narrow what you can already see. They never widen record visibility.

Custom fields

Custom field values for a record are at GET /v1/custom-fields/values/{entityType}/{entityId}. They include computed formula and roll-up values, flagged computed: true. GraphQL exposes the same values as customFields on each record. See custom objects.

On this page