Skip to main content
POST
/
v2
/
contacts
curl --request POST \
  --url https://pub-api.conversion.ai/api/v2/contacts \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "email": "jane@example.com",
  "subscriptionStatus": "SUBSCRIBED",
  "fields": {
    "first_name": "Jane",
    "last_name": "Smith",
    "job_title": "VP of Marketing"
  },
  "companyFields": {
    "company_name": "Acme Corp"
  }
}
'
{
  "data": {
    "cnvContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "contactCreated": true
  }
}

Authorizations

X-API-Key
string
header
required

Your Conversion API key. Found in Settings > Integrations in the dashboard. Format: sk_live_<key_id>_<secret>.

Body

application/json
email
string<email>

The contact's email address. At least one of email or cnvContactId is required. When both are provided, cnvContactId identifies the contact and email updates the contact's email address.

Example:

"jane@example.com"

cnvContactId
string<uuid>

The Conversion contact ID. Use this to identify an existing contact by its internal ID instead of email. At least one of email or cnvContactId is required.

Example:

"a1b2c3d4-e5f6-7890-abcd-ef1234567890"

subscriptionStatus
enum<string>

The contact's email subscription status. System-managed statuses (BOUNCED, COMPLAINED, etc.) cannot be set through the API.

Available options:
SUBSCRIBED,
UNSUBSCRIBED,
NO_STATUS
fields
object

A map of contact field keys to values. Keys must match existing field definitions in your Conversion account.

Example:
{
"first_name": "Jane",
"last_name": "Smith",
"job_title": "VP of Marketing"
}
companyFields
object

A map of company field keys to values for the contact's associated company.

Example:
{
"company_name": "Acme Corp",
"industry": "Technology"
}
updateOnly
boolean
default:false

When true, restricts the operation to updates only. Returns a contact_not_found error if no existing contact matches the provided identifier.

syncToCRM
boolean
default:false

When true, syncs the contact to the connected CRM (e.g., Salesforce) if the contact does not already have an external CRM record.

preserveExistingFields
boolean
default:false

When true, prevents overwriting existing non-empty field values. New values are only written to fields that are currently empty or unset. Useful for enrichment workflows.

Response

Contact upserted successfully.

data
object