Add Contact to Campaign
Add a new contact to an existing campaign. If the contact doesn't exist, it will be created automatically.
POST /external/v1/campaigns/:id/contactsAuthentication
Requires API key with campaigns:write permission.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | uuid | Campaign ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Contact full name |
linkedin_profile_url | string | Yes | LinkedIn profile URL |
title | string | No | Job title |
company | string | No | Company name |
location | string | No | Location |
email | string | No | Email address |
phone | string | No | Phone number |
about | string | No | Profile summary/bio |
profile_picture | string | No | Profile picture URL |
extracted_contacts | object | No | Extracted contact information |
extracted_contacts Object
| Field | Type | Description |
|---|---|---|
emails | string[] | Email addresses found |
phones | string[] | Phone numbers found |
websites | string[] | Website URLs found |
Response
json
{
"success": true,
"data": {
"campaign_contact": {
"id": "550e8400-e29b-41d4-a716-446655440001",
"campaign_id": "550e8400-e29b-41d4-a716-446655440000",
"contact_id": "550e8400-e29b-41d4-a716-446655440002",
"status": "approved",
"created_at": "2026-03-20T14:22:00Z"
},
"contact": {
"id": "550e8400-e29b-41d4-a716-446655440002",
"name": "John Doe",
"profile_url": "https://linkedin.com/in/johndoe"
},
"campaign": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Tech Founders SF Q1"
}
},
"message": "Contact added to campaign successfully"
}Example
cURL
bash
curl --request POST \
--url "https://app.getraze.com/external/v1/campaigns/550e8400-e29b-41d4-a716-446655440000/contacts" \
--header "X-API-Key: YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"name": "John Doe",
"linkedin_profile_url": "https://linkedin.com/in/johndoe",
"title": "CTO",
"company": "Acme Inc",
"location": "San Francisco, CA"
}'JavaScript
javascript
const response = await fetch(
'https://app.getraze.com/external/v1/campaigns/CAMPAIGN_ID/contacts',
{
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'John Doe',
linkedin_profile_url: 'https://linkedin.com/in/johndoe',
title: 'CTO',
company: 'Acme Inc'
})
}
);
const data = await response.json();Python
python
import requests
response = requests.post(
f'https://app.getraze.com/external/v1/campaigns/{campaign_id}/contacts',
headers={'X-API-Key': 'YOUR_API_KEY'},
json={
'name': 'John Doe',
'linkedin_profile_url': 'https://linkedin.com/in/johndoe',
'title': 'CTO',
'company': 'Acme Inc'
}
)
data = response.json()Errors
| Status | Code | Description |
|---|---|---|
| 400 | VALIDATION_ERROR | Missing required fields |
| 401 | MISSING_API_KEY | No API key provided |
| 403 | INSUFFICIENT_PERMISSIONS | Missing campaigns:write permission |
| 404 | NOT_FOUND | Campaign not found |
| 409 | DUPLICATE_ERROR | Contact already exists in this campaign |