Find Contacts
Looks contacts up by email, by externalId with its source, or by tag. Without filters it lists every contact of the account, oldest first, one page at a time.
GET
/v1/crm/contactsAuthentication
API key
Authorization: BearerSecret API key as Authorization: Bearer sk_live_…. Create it in the dashboard under Workspace settings › API Keys, with full access or only the areas it needs (see API Keys & Scopes). Keys are for servers only. Needs the contacts:read scope.
Query Parameters
emailstringExact email.
externalIdstringYour id for the contact. Pair it with source.
sourcestringNamespace of externalId.
Default:
apitagstringOnly contacts with this tag.
limitnumberContacts per page, 1 to 100.
Default:
25cursorstringThe nextCursor of the previous page.
Responses
200Success
application/jsondataarrayContacts of this page.
nextCursorstring | nullPass it as cursor to get the next page. null on the last page.
Errors
401Missing, invalid or revoked API key. The body is { error: { code, message } }.403The account has no active subscription (error.code subscription_inactive), or the key lacks the required scope (insufficient_scope, and error.details.required names it).429More than 120 requests per minute for this key. Wait for the Retry-After header.422Validation failed. error.details maps each field to a message; unknown fields are rejected.Notes
- Keep calling with the returned
nextCursoruntil it isnullto read every contact.
Request
curl --request GET \--url "https://api.pandaidx.com/v1/crm/contacts?email=ana%40example.com" \--header "Authorization: Bearer {{api_key}}"
Response200 OK
{"data": [{"id": "6ad0c3f2e4b1a2c3d4e5f607","email": "ana@example.com","name": "Ana Torres","phones": ["+13055550100"],"image": null,"website": null,"streetAddress": null,"type": "buyer","stage": "new-lead","price": null,"source": "zapier","tags": ["buyer"],"externalIds": [{"source": "zapier","id": "abc-1"}],"createdAt": "2026-10-14T13:40:12.000Z","updatedAt": "2026-10-14T13:40:12.000Z"}],"nextCursor": null}