Skip to main content
Salfio Docs

Search documentation

Type to search this documentation.

List clients

GET/clientsList clients

Returns the authenticated organization's non-deleted clients, ordered by opaque internal ID for a stable cursor anchor. Use the cursor returned in meta.cursor (if meta.hasMore is true) to fetch the next page.

Today's response includes id, name, domain, createdAt, updatedAt. Additional fields (email, phone, company, notes) listed in the v1.0 spec are not yet populated.

Parameters

limitintegerquery

Page size (default 20, max 100).

default 20 · maximum 100 · minimum 1

cursorstringquery

Opaque cursor from a previous response's `meta.cursor`.

Responses

200Page of clients.application/json

Headers

X-RateLimit-Limit

The request cap for the tighter of the per-organization / per-endpoint windows that applied to this request.

X-RateLimit-Remaining

Requests remaining in the current window.

X-RateLimit-Reset

Unix timestamp (seconds) when the current window resets.

value
allOf · 2 options
Option 1objectEnvelope
datavaluerequired

The response payload — shape depends on the endpoint.

metaobjectrequired

Pagination metadata — populated on list endpoints, empty on single-resource endpoints.

Show child attributes
cursornull | string

Opaque cursor to pass to the next request.

hasMoreboolean | null

True when further pages of results are available.

Option 2object
dataarray of object
Show child attributes
Show array items

A client record (partner's CRM account / customer). The fields `email`, `phone`, `company`, and `notes` from the v1.0 spec document are not yet populated — tracked as a follow-up.

accountManagersarray of objectrequired

Users assigned as account managers for this client. Peers — no primary/secondary distinction. Always present; an empty array signals no managers are assigned.

Show child attributes
Show array items

Minimal user identity surfaced on client records.

emailstring · emailrequired
firstNamestringrequired
lastNamestringrequired
userIdstring · uuidrequired

Stable UUID for this user.

clientTypestringrequired

Lifecycle stage of the client (status, not legal entity type). `prospect` → `active` → `churned` is the canonical progression. Use this to answer pipeline/status questions ("who are my prospects?", "who has churned?"). Defaults to `active` on creation when the caller omits the field.

one of "prospect", "active", "churned"

createdAtstring · date-timerequired

UTC timestamp when the client was created.

domainnull | string

Primary email domain used to auto-assign communications (e.g. `acme.com`).

idstring · uuidrequired

Stable UUID for this client.

namestringrequired

Display name of the client.

updatedAtstring · date-timerequired

UTC timestamp of the most recent update.

Example response
{
  "data": [
    {
      "accountManagers": [
        {
          "email": "user@example.com",
          "firstName": "string",
          "lastName": "string",
          "userId": "00000000-0000-0000-0000-000000000000"
        }
      ],
      "clientType": "active",
      "createdAt": "2026-06-09T00:00:00Z",
      "domain": "acme.com",
      "id": "8b2d1c4e-3f5a-4e2b-9c8f-1e2d3c4b5a6f",
      "name": "Acme Corp",
      "updatedAt": "2026-06-09T00:00:00Z"
    }
  ],
  "meta": {
    "cursor": "string",
    "hasMore": true
  }
}
400Request body / query parameters failed validation.application/json
objectErrorEnvelope
errorobjectrequired
Show child attributes
codestringrequired

Machine-readable error category.

one of "unauthorized", "forbidden", "not_found", "invalid_argument", "conflict", "rate_limited", "internal_error", "not_implemented"

detailsobject

Optional per-code context (field names, retry windows, …).

messagestringrequired

Human-readable description — intended for operator logs, not end-user display.

Example response
{
  "error": {
    "code": "invalid_argument",
    "message": "limit must be an integer between 1 and 100"
  }
}
401Missing or invalid bearer token. The message is intentionally opaque — do not rely on it to distinguish "missing" from "invalid".application/json
objectErrorEnvelope
errorobjectrequired
Show child attributes
codestringrequired

Machine-readable error category.

one of "unauthorized", "forbidden", "not_found", "invalid_argument", "conflict", "rate_limited", "internal_error", "not_implemented"

detailsobject

Optional per-code context (field names, retry windows, …).

messagestringrequired

Human-readable description — intended for operator logs, not end-user display.

Example response
{
  "error": {
    "code": "unauthorized",
    "message": "Authentication required"
  }
}
429Per-organization or per-endpoint rate limit exceeded.application/json

Headers

Retry-After

Seconds the client should wait before retrying.

objectErrorEnvelope
errorobjectrequired
Show child attributes
codestringrequired

Machine-readable error category.

one of "unauthorized", "forbidden", "not_found", "invalid_argument", "conflict", "rate_limited", "internal_error", "not_implemented"

detailsobject

Optional per-code context (field names, retry windows, …).

messagestringrequired

Human-readable description — intended for operator logs, not end-user display.

Example response
{
  "error": {
    "code": "rate_limited",
    "details": {
      "retry_after_seconds": 30
    },
    "message": "Rate limit exceeded"
  }
}

Documentation menu