psp-* endpoints.
Base URL
All endpoints are available under the following base URL:Authentication
Send a singleAuthorization: Bearer <api key> header on every request. The key resolves to your organization, and every request is scoped to it automatically.
organization field in the request body is optional. If included, it must match the organization your key resolves to, or the request is rejected with 400.
Request mechanism
Every endpoint — including list endpoints — takes aPOST with a JSON body, matching the request mechanism of the earlier API.
Pagination
List endpoints accept a JSON body with these common fields:- limit: Max number of items to return (default 100)
- offset: Number of items to skip. Still supported, but deprecated in favor of
cursor— see below. - cursor: Opaque resume token from a previous response’s
next_cursor. Use it instead ofoffsetto page through large result sets.cursorand a non-defaultoffsetcannot both be set on the same request; doing so returns a400.
next_cursor field alongside body:
next_cursor is null once you’ve reached the last page. To fetch the next page, pass it back as cursor on your next request:
Why prefer cursor over offset?
A large offset forces the API to compute and discard every skipped row before it can return your page, so requests get progressively slower the deeper you page — noticeable once you’re paging through more than a few thousand records. cursor resumes directly from your last position instead and stays fast at any depth.
Ordering
Results are ordered ascending by last-modified time, withid breaking ties so paging stays stable across rows that share a timestamp. A record that hasn’t been modified since it was created sorts before ones that have.
Consistency
Pagination reflects live data, not a fixed snapshot. If a record is modified while you’re still working through the pages of a search, you may see it again on a later page (withcursor) or, less commonly, miss it entirely (with offset). This is standard behavior for APIs that paginate over continuously-changing data, and it’s the same tradeoff you’d see from most delta-sync APIs.
If your integration needs to process each record exactly once, de-duplicate by id as you consume pages rather than assuming each id appears only once across a full traversal.
Feel free to reach out to our support team if you have any questions or need help getting started!