Skip to main content

Endpoints

Use these endpoints to sync CRM contacts from external systems. Batch write requests accept an items array with up to 100 records. For bulk file-based ingestion, see Importing Contacts; for field definitions, see Managing Contact Fields.
Contact writes support partial success. Tented processes each item independently and returns accepted or rejected results in request order.

Look Up Contacts

GET /v1/contacts has two modes. With an email or phone query parameter it is an identifier lookup returning zero or one contact (shown here). Without an identifier it becomes a paginated listing — see List Contacts.

Query Parameters

Lookup Request Example

Lookup Response Example

Returns items with the matching contact, or an empty array when no contact matches. custom_fields is keyed by each custom field’s API name.

Get a Contact

Fetch a single contact by its ID — the contact_id returned by create, update, and lookup responses.

Path Parameters

Get Request Example

Get Response Example

Returns the contact object directly, including custom_fields keyed by each custom field’s API name — the same shape as a lookup item.

List Contacts

Without an email/phone identifier, GET /v1/contacts pages through the workspace’s contacts. Returns {items, pagination}. List items do not include custom_fields — fetch a single contact for those.

Update a Single Contact

Single-record alternative to the batch update: the request body takes the same fields as an update item (minus contact_id), returns the updated contact directly, 404 when missing, and 409 with existing_contact when an email/phone change collides with another contact.

Delete a Single Contact

Returns 204 on success, 404 when the contact does not exist.

Contact Activities

Read-only, paginated activity timeline: contact_created, contact_updated, email engagement events (sent, delivered, opened, clicked, bounced, unsubscribed), and flow entry/exit — each with a type, timestamp, and event-specific metadata.

Create Contacts

Request Body

Create Item Fields

Create Request Example

Create Response Example

201 Created

Duplicate Contacts

Tented checks normalized email and phone values before creating a contact. If an item matches an existing contact, that item is rejected with error_code: "conflict". If you want matches to be updated instead of rejected, use Upsert Contacts.

Upsert Contacts

Create-or-update in one call — no conflict handling required. Each item (up to 100) is matched by its normalized email (or phone, for phone-only items): a match updates that contact, no match creates one. Items accept the full update field set including custom_fields, and each result reports status: "created" or "updated".
Matching is identifier-scoped: an item is only ever matched on its own identifier. If a new email’s item carries a phone that belongs to a different contact, the item is rejected with error_code: "conflict" and the existing_contact — it never silently modifies the phone-matched contact.
Response mirrors the batch format with created_count, updated_count, and rejected_count.

Search Contacts

Filter contacts with a rule tree — the same engine that powers dynamic lists and blast audiences. Discover the available fields and operators with GET /v1/contact-fields/rule-metadata.

Update Contacts

Request Body

Update Item Fields

A contact must always have at least one valid email or phone. An update that clears both identity fields is rejected for that item.
marketing_email_invalid is system-managed and read-only: Tented sets it to true when a marketing email to the contact hard-bounces, and resets it to false when the contact’s email address changes. It appears in contact responses and audience rules, but requests that include it are rejected.

Update Request Example

Update Response Example

200 OK

Delete Contacts

Use POST /v1/contacts/delete if your HTTP client does not support request bodies on DELETE.

Request Body

Delete Item Fields

Delete Request Example

Delete Response Example

200 OK

Batch Response Format

Every contacts write endpoint returns: Rejected items include:

Common Item-Level Rejections

Common Request Errors

Back to API Overview

Review the full Tented API endpoint map.