Add Profile to Contact
Attach enrichment or external profile data to a contact
Inserts a profile data record on a contact. Profile data is stored as flexible key-value pairs with a source label, making it ideal for enrichment data from external systems (e.g., LinkedIn data, OSINT results, third-party enrichment services).
Requires a valid `api_key` and `developer_secret` in the JSON request body. Requests must originate from a whitelisted IP address.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
api_key |
body | string |
Yes | Your Zyntro API key |
developer_secret |
body | string |
Yes | Your developer secret (zdk_XXX). Issued during developer onboarding. |
org_id |
body | string |
Yes | Your organization UUID |
member_id |
body | string |
Yes | The member UUID. Must be the contact's owner. |
contact_id |
body | string |
Yes | The UUID of the contact |
profile_payload |
body | object |
Yes | A JSON object of key-value pairs representing the profile data. Keys and values can be anything relevant to the contact. |
profile_source |
body | string |
Yes | A label describing where this profile data came from (e.g., "LinkedIn", "Clearbit", "Manual Research"). |
Request Body
Content-Type: application/json
Example
json
{
"org_id": "YOUR_ORG_ID",
"api_key": "YOUR_API_KEY",
"member_id": "YOUR_MEMBER_ID",
"contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"profile_source": "Clearbit Enrichment",
"profile_payload": {
"job_title": "VP of Marketing",
"company_size": "200-500",
"linkedin_url": "https://linkedin.com/in/janesmith",
"funding_stage": "Series B",
"technologies_used": [
"HubSpot",
"Salesforce",
"Mailchimp"
]
},
"developer_secret": "YOUR_DEVELOPER_SECRET"
}
Code Samples
bash
curl -X POST https://app.zyntrohq.com/apis/v2/public/crm/addProfileToContact \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"developer_secret": "YOUR_DEVELOPER_SECRET",
"org_id": "YOUR_ORG_ID",
"member_id": "YOUR_MEMBER_ID",
"contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"profile_payload": {
"linkedin_url": "https://linkedin.com/in/janesmith",
"job_title": "VP of Marketing"
},
"profile_source": "LinkedIn Scraper"
}'
Tip:
Profile data is additive — each call creates a new profile record. Multiple profile entries from different sources can coexist on the same contact, giving SI a richer picture for personalization decisions.
Response
200
Profile data added
json
{
"data": {
"profile_id": 142,
"profile_source": "LinkedIn Scraper",
"profile_payload": {
"job_title": "VP of Marketing",
"linkedin_url": "https://linkedin.com/in/janesmith"
}
},
"status": "success"
}
200
Error response
json
{
"data": [
"Profile payload must be a valid array. The key/value pairing can be anything you like."
],
"status": "error"
}
Errors
| Code | Message | Resolution |
|---|---|---|
MISSING_API_KEY |
Missing service instance The `api_key` field is missing or empty. |
Include your API key. |
INVALID_API_KEY |
Invalid API Key No active user matches the key. |
Verify your key. |
IP_NOT_WHITELISTED |
IP address not whitelisted The request originated from an IP not in the key's allowed list. |
Contact your client to add your IP to the developer key whitelist. |
INVALID_DEVELOPER_SECRET |
Invalid developer_secret The developer secret does not match any active key. |
Verify your developer secret. If lost, have your client revoke and reissue the key. |
MISSING_DEVELOPER_SECRET |
Missing developer_secret The `developer_secret` field is missing or empty. |
Include your developer secret in the request body. This is issued during developer onboarding. |
MISSING_FIELDS |
Missing org ID / member ID / contact ID / profile_payload / profile_source A required field is missing. |
Include all required fields. |
INVALID_PAYLOAD |
Profile payload must be a valid array. The key/value pairing can be anything you like. The `profile_payload` is not a valid JSON object or array. |
Send a properly formatted JSON object. |
NOT_FOUND |
Contact does not exist No contact with that ID exists. |
Verify the contact_id. |
NOT_OWNER |
The API only supports notes being added by the member that owns the contact. The member_id does not match the contact's owner. |
Use the contact owner's member ID. |