Skip to main content
POST
Upsert Synced Contact
Use this endpoint for Salesforce, Shopify, Zapier, or another system that sends one contact change at a time. You do not need a custom Zapier integration or a separate batch endpoint. The combination of source.key and externalId is the durable sync identity. The first request can define the source, its fields, and the contact in one operation. Later requests can omit fields unless the source schema changes.

Define fields

Field keys use lowercase snake case. Supported types are text, number, boolean, date, enum, url, email, and phone. Define the system field keys before sending their top-level values:
  • name uses text
  • email uses email
  • phone_number uses phone
Each non-system key in attributes must have a field definition owned by the same source. Dates use ISO 8601 datetime strings. Enum values must match one of the field’s enumOptions.

Apply sparse updates

Omitted contact properties and attribute keys remain unchanged. Send an explicit null to clear a top-level value or attribute. The API does not treat missing contacts as deletions. Use match.email or match.phoneNumber to attach a new external identity to an existing contact. Match values are lookup-only and do not update the contact. A match succeeds only when the value identifies one contact. Ambiguous matches, or email and phone resolving to different contacts, return 409 Conflict.

Use with Zapier

Create a Webhooks by Zapier action that sends a POST request to:
Send Authorization: Bearer YOUR_API_KEY and Content-Type: application/json headers, then map the CRM fields into the request body shown in the example.

Authorizations

Authorization
string
header
required

Body

application/json
source
Contact Sync Source · object
required
externalId
string
required

Stable contact identifier from the external source.

Required string length: 1 - 1000
fields
object

Field definitions owned by this source. Include them when first used or when labels, descriptions, or enum options change. Define name, email, and phone_number before sending their corresponding top-level values.

name
string | null

Contact name. Omit to leave unchanged or send null to clear it.

Required string length: 1 - 255
email
string<email> | null

Contact email. Omit to leave unchanged or send null to clear it.

phoneNumber
string | null

Contact phone number. Omit to leave unchanged or send null to clear it.

Required string length: 1 - 255
match
Contact Sync Match · object
attributes
object

Values for non-system fields defined by this source. Values must match their field type. Omit a key to leave it unchanged or send null to clear it.

Response

The existing contact was updated or linked to the supplied external identity.

contact
Synced Contact · object
required
created
boolean
required

True when this request created the Simple contact.

linked
boolean
required

True when a new external identity was linked to an existing Simple contact.