List contacts
GET /v1/contacts
Returns a cursor-paginated list of contacts in the active workspace. Pass
after=<id> to fetch the next page. For a full initial sync use
order=asc and walk forward from after=0; for an incremental sync add
updatedSince. Requires scope contacts:read.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters ”Act on this workspace’s shared CRM pool. Membership is verified on every request, so an id you do not belong to falls back to personal scope rather than widening access. Omit it to use your default workspace. Applies to every CRM endpoint, not only the ones that list it here.
Query Parameters
Section titled “Query Parameters ”Return contacts on the far side of this id (less than, or greater than when order=asc).
Number of contacts to return. Clamped to 1-100.
Filter by platform.
Case-insensitive substring search across name, username, phone, email, company and externalId.
Exact match on the contact’s id in your own system.
Exact, case-insensitive match on the email address.
Only contacts changed at or after this UTC timestamp. The cheap way to run an incremental sync.
Include contacts that were soft-deleted (archived). Off by default.
Sort direction by id. desc (newest first) is the default; asc gives a stable oldest-first walk for a full sync.
Responses
Section titled “ Responses ”Paginated contact list.
Cursor-paginated list of contacts.
object
A CRM contact record.
object
Social platform the contact belongs to.
Handle without the leading @.
The contact’s id in your own system. The stable key the batch endpoint upserts on.
CRM pipeline stage.
Lead score 0-100 (higher = hotter). Null when not scored.
True when the score was last set by AI, false for a manual override.
Team member the contact is assigned to.
Workspace member the row is filed under. Differs from the caller in a shared pool.
Custom pipeline board the contact sits on.
Column within pipelineId.
How the contact entered the CRM (OutboundMessage, InboundMessage, Manual, CsvImport, Extension, …).
True once the contact has been soft-deleted or archived.
Custom field values keyed by field key. Null when the contact has none.
object
Attached tags (populated on GET by id, omitted in list responses).
object
Hex color
Pass as after on the next request to continue pagination. Null when hasMore is false.
Whether additional pages exist beyond this response.
Example
{ "items": [ { "id": 101, "platform": "telegram", "name": "Acme Inc.", "username": "john_doe", "phone": null, "notes": null, "stage": "Lead", "createdAt": "2024-03-01T10:00:00Z", "lastMessageAt": null, "hasUnreadMessages": false } ], "nextCursor": 101, "hasMore": false}The request body or parameters failed validation.
Standard error envelope for all v1 error responses.
object
Machine-readable error code.
Human-readable explanation of the error.
Optional structured context (field-level validation errors, etc.).
Example
{ "error": "bad_request", "message": "at least one of name, username, phone is required"}Missing or invalid bearer token.
Standard error envelope for all v1 error responses.
object
Machine-readable error code.
Human-readable explanation of the error.
Optional structured context (field-level validation errors, etc.).
Example
{ "error": "unauthorized", "message": "Invalid bearer principal"}The API key does not have the required scope for this operation.
Standard error envelope for all v1 error responses.
object
Machine-readable error code.
Human-readable explanation of the error.
Optional structured context (field-level validation errors, etc.).
Example
{ "error": "forbidden", "message": "scope contacts:write is required"}Per-key rate limit exceeded. Retry after the time indicated by X-RateLimit-Reset.
Standard error envelope for all v1 error responses.
object
Machine-readable error code.
Human-readable explanation of the error.
Optional structured context (field-level validation errors, etc.).
Example
{ "error": "rate_limited", "message": "rate limit exceeded"}Headers
Section titled “Headers ”Maximum requests allowed per minute for this key.
Requests remaining in the current window.
Unix timestamp (seconds) when the rate limit window resets.