Contact and registry endpoints
Contacts
GET /api/contacts
page, pageSize.
| Parameter | Filter |
|---|---|
|
Free text across name, email, phone and company |
|
Field-specific partial matches |
|
Exact |
|
Contacts belonging to one seller |
|
|
|
|
|
|
|
Boolean |
|
Only contacts with an address |
|
Only contacts linked to a supplier record |
GET /api/contacts/{id}/stats
Aggregate counts for the contact detail header — calls, emails, activities, tasks.
GET /api/contacts/{id}/emails / PATCH /api/contacts/{id}/emails/{emailId}
The contact’s messages, and per-message updates (read, archive, category).
Suppliers
GET /api/suppliers
page, pageSize. Response includes facets (distinct status values) for filter dropdowns.
Each row includes contact_id when a workspace Contact shares the same supplier_key.
| Parameter | Filter |
|---|---|
|
Name, company, email, phone, supplier key, store, merchant token |
|
Exact |
|
Exact |
|
Exact |
|
Exact |
|
Exact |
Phone registry
GET /api/target-phone-numbers
Paginated TargetPhoneNumbers for the workspace. page (default 1), pageSize (default 25, max 200).
Backs /targets/phone-numbers.
| Parameter | Filter |
|---|---|
|
Phone number or carrier name, case-insensitive substring |
|
|
|
|
|
|
|
|
{
"data": [
{
"id": "uuid",
"phone_number": "+1******890",
"subscription_id": "uuid",
"contact_id": "uuid",
"contact_email": "user@example.com",
"country_code": "1",
"carrier_name": "Example Carrier",
"mobile_country_code": null,
"mobile_network_code": null,
"line_type": "mobile",
"risk_level": "low",
"is_active": true,
"is_deleted": false,
"is_blocked": false,
"sync_twilio": false,
"sync_hubspot": false,
"hubspot_synced_at": null,
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
],
"total": 100,
"page": 1,
"pageSize": 25
}
Phone numbers are masked in the response (lib/utils/mask-phone.ts).
Only rows with riskLevel of low or null, not blocked and not deleted, are dialable — see
Registries.
Email registry
GET /api/target-emails
Paginated TargetEmails for the workspace. page, pageSize.
| Parameter | Filter |
|---|---|
|
Address substring |
|
|
|
|
|
|
|
|
An address is suppressed when any of newsletterOptOut, marketingOptOut or isBlocked is set. See
Suppression.
Cross-campaign targets
GET /api/targets
Paginated CampaignTarget rows across every campaign in the workspace.
- Parameters
-
campaignId,state,search,page,pageSize
/targets in the dashboard redirects to /targets/phone-numbers; /targets/emails is a placeholder
for a future email-targets view — email recipients remain under Email campaigns.