List contacts
Retrieve a paginated list of contacts in your organization, optionally filtered by update time or event type.
GET/api-contacts
Returns contacts in the caller's organization. Designed to support both general listing and Zapier‑style polling triggers.
Query parameters
Query
| Name | Type | Description |
|---|---|---|
updated_since | string (ISO 8601) | Return only contacts updated at or after this timestamp. |
event | string | Optional. Filter by event type for Zapier polling. Accepted values: created, updated, tag_added, enriched. When combined with updated_since, returns only contacts matching that specific change type. When set to created, results are sorted by created_at and combined with updated_since as a created_at filter. When set to enriched, results are filtered to contacts with a non‑null enriched_at and sorted by enriched_at. |
limit | integer | Max contacts to return. Default 100, max 200. |
offset | integer | Pagination offset. Default 0. |
order | string | Optional. Sort direction. Accepted values: asc, desc. Defaults to desc (newest first, as expected by Zapier polling triggers). |
Example request
bash
curl -X GET \
'https://api.wundertreos.com/functions/v1/api-contacts?limit=50&updated_since=2026-01-01T00:00:00Z' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'js
const res = await fetch(
"https://api.wundertreos.com/functions/v1/api-contacts?limit=50",
{ headers: { Authorization: `Bearer ${token}` } }
);
const { data, meta } = await res.json();Response
json
{
"data": [
{
"id": "c8b1f3a0-4d2e-4f9a-9b1c-2d4e5f6a7b8c",
"org_id": "a1b2c3d4-1111-2222-3333-444455556666",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"phone": "+15551234567",
"company": "Acme Inc",
"company_id": null,
"job_title": "Head of Growth",
"industry": "SaaS",
"address_line1": "100 Market St",
"address_line2": null,
"city": "San Francisco",
"state": "CA",
"zip": "94105",
"country": "US",
"tags": ["lead", "vip"],
"status": "active",
"stage": "customer",
"source": "api",
"score": 72,
"notes": null,
"linkedin_url": "https://linkedin.com/in/janedoe",
"enriched_at": "2026-05-17T11:02:08Z",
"enrichment_status": "complete",
"email_subscribed": true,
"created_at": "2026-04-12T09:31:22Z",
"updated_at": "2026-05-17T11:02:08Z",
"created_by": "u1b1f3a0-4d2e-4f9a-9b1c-2d4e5f6a7b8c"
}
],
"meta": { "limit": 50, "offset": 0, "count": 1 }
}Response
| Field | Type | Description |
|---|---|---|
data | Contact[] | Array of contact objects. |
data[].id | uuid | Unique contact ID. |
data[].org_id | uuid | Organization the contact belongs to. |
data[].first_name | string | Given name. |
data[].last_name | string | Family name. |
data[].emailnullable | string | Primary email address. |
data[].phonenullable | string | Phone number. |
data[].companynullable | string | Free‑text company name. |
data[].company_idnullable | uuid | Linked company record, if any. |
data[].job_titlenullable | string | Job title. |
data[].industrynullable | string | Industry. |
data[].address_line1nullable | string | |
data[].address_line2nullable | string | |
data[].citynullable | string | |
data[].statenullable | string | |
data[].zipnullable | string | |
data[].countrynullable | string | |
data[].tags | string[] | Tags applied to the contact. |
data[].status | string | Lifecycle status (e.g. active, unsubscribed). |
data[].stagenullable | string | Pipeline stage label. |
data[].source | string | How the contact was created (e.g. api, import, form). |
data[].scorenullable | integer | Lead score. |
data[].notesnullable | string | Free‑form notes. |
data[].linkedin_urlnullable | string | |
data[].enriched_atnullable | string (ISO 8601) | When enrichment last ran. |
data[].enrichment_statusnullable | string | |
data[].email_subscribed | boolean | |
data[].created_at | string (ISO 8601) | |
data[].updated_at | string (ISO 8601) | |
data[].created_bynullable | uuid | User who created the contact. |
meta.limit | integer | |
meta.offset | integer | |
meta.count | integer | Number of items returned in the current page. Note: count reflects the number of records in this page, not the total across all pages. Use offset to paginate through results. |
