List leads

GET/api/v1/leadsscope: leads.read

Returns leads in your organisation, ordered by next-call time ascending then by creation time descending. The response is paginated - a maximum of 100 leads come back per page. Walk `pagination.totalPages` (or keep going until `pagination.hasNextPage` is `false`) to read everything. See [API conventions → Pagination](/docs/api-conventions/pagination) for the shared pagination contract.

Query parameters

FieldTypeRequiredDescription
statusenum (NOT_CONTACTED | CONTACTED | QUALIFIED | CONVERTED | LOST)noFilter by exact status
searchstringnoCase-insensitive match against contact name, email, phone, or company
assignedToIdstringnoOrgMember id, or the literal string "unassigned" for leads with no owner
pagenumberno1-indexed page number. Defaults to 1.
pageSizenumbernoItems per page (1–100). Defaults to 50.

Response

Returns a paginated wrapper:

FieldTypeRequiredDescription
dataobject[]yesPage of leads
paginationobjectyes-

Each item in data

FieldTypeRequiredDescription
idstringyesLead id
namestringyesContact name
phonesstring[]yesNormalised phone numbers (E.164)
emailsstring[]yesNormalised email addresses (lowercased)
primaryPhonestring | nullyesFirst/primary phone, or null
primaryEmailstring | nullyesFirst/primary email, or null
contactIdstringyesUnderlying Contact record id
companystring | nullyes-
sourcestring | nullyesFree-text source label e.g. "website", "referral"
statusenum (NOT_CONTACTED | CONTACTED | QUALIFIED | CONVERTED | LOST)yes-
notesstring | nullyes-
nextCallAtstring | nullyesISO timestamp of the next scheduled call
createdAtstringyes-
updatedAtstringyes-
assignedToIdstring | nullyesOrgMember id
clientIdstring | nullyesClient id this lead is linked to

Example response

{
  "data": [
    {
      "id": "65f0a000a000a000a000a001",
      "name": "Acme Co - Jane Doe",
      "phones": [
        "+14155550101"
      ],
      "emails": [
        "jane@acme.com"
      ],
      "primaryPhone": "+14155550101",
      "primaryEmail": "jane@acme.com",
      "contactId": "65f0a000a000a000a000a002",
      "company": "Acme Co",
      "source": "website",
      "status": "QUALIFIED",
      "notes": null,
      "nextCallAt": "2026-05-02T10:30:00.000Z",
      "createdAt": "2026-04-21T09:00:00.000Z",
      "updatedAt": "2026-04-28T16:14:00.000Z",
      "assignedToId": "65e0a000a000a000a000a000",
      "clientId": null
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 50,
    "total": 137,
    "totalPages": 3,
    "hasNextPage": true,
    "hasPrevPage": false
  }
}

cURL

curl -X GET 'https://your-host/api/v1/leads' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Try it

GET/api/v1/leads
Sign in to test endpoints

The playground sends real requests against your org. Sign in to spin up a 1-hour test token. You need DEVELOPER permission and the DEVELOPER_API feature enabled in the org.

Query

Filter by exact status

Case-insensitive match against contact name, email, phone, or company

OrgMember id, or the literal string "unassigned" for leads with no owner

1-indexed page number. Defaults to 1.

Items per page (1–100). Defaults to 50.