curl --request POST \
--url https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"custom_fields": {}
}
'import requests
url = "https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual"
payload = {
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"custom_fields": {}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
first_name: '<string>',
last_name: '<string>',
company: '<string>',
custom_fields: {}
})
};
fetch('https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>',
'company' => '<string>',
'custom_fields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"custom_fields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"custom_fields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"custom_fields\": {}\n}"
response = http.request(request)
puts response.read_body{
"lead_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"status": "<string>",
"last_contacted_at": "2023-11-07T05:31:56Z",
"opened_at": "2023-11-07T05:31:56Z",
"replied_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"custom_fields": {},
"sequence_step": 0,
"next_followup_scheduled_for": "2023-11-07T05:31:56Z",
"email_opened": false,
"email_replied": false,
"unsubscribed": false,
"delivery_status": "<string>",
"is_suppressed": false,
"current_intent_tag": {
"tag_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tag_name": "<string>",
"tag_color": "<string>",
"is_ai_applied": true,
"confidence": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Add a single lead manually
Add a single lead to a campaign
Add one lead at a time to a campaign. Useful for adding individual leads without uploading a CSV file.
Request Body
- email: Lead email address (required)
- first_name: First name (optional)
- last_name: Last name (optional)
- company: Company name (optional)
- custom_fields: Custom lead fields as key-value pairs (optional)
Example Usage
import requests
campaign_id = "550e8400-e29b-41d4-a716-446655440000"
lead_data = {
"email": "john.doe@example.com",
"first_name": "John",
"last_name": "Doe",
"company": "Acme Inc",
"custom_fields": {
"industry": "Technology",
"source": "LinkedIn"
}
}
response = requests.post(
f"https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual",
headers={"X-API-Key": "your-api-key"},
json=lead_data
)
print(response.json())
curl --request POST \
--url https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"custom_fields": {}
}
'import requests
url = "https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual"
payload = {
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"custom_fields": {}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
first_name: '<string>',
last_name: '<string>',
company: '<string>',
custom_fields: {}
})
};
fetch('https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>',
'company' => '<string>',
'custom_fields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"custom_fields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"custom_fields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coldsend.pro/api/public/v1/campaigns/{campaign_id}/leads/manual")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"custom_fields\": {}\n}"
response = http.request(request)
puts response.read_body{
"lead_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"status": "<string>",
"last_contacted_at": "2023-11-07T05:31:56Z",
"opened_at": "2023-11-07T05:31:56Z",
"replied_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"custom_fields": {},
"sequence_step": 0,
"next_followup_scheduled_for": "2023-11-07T05:31:56Z",
"email_opened": false,
"email_replied": false,
"unsubscribed": false,
"delivery_status": "<string>",
"is_suppressed": false,
"current_intent_tag": {
"tag_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tag_name": "<string>",
"tag_color": "<string>",
"is_ai_applied": true,
"confidence": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
API key with format cs_live_xxx
Path Parameters
Body
Response
Lead added successfully
Response schema for individual lead.
Lead ID
Batch ID this lead belongs to
Lead email address
First name
Last name
Company name
Lead status
Last contact timestamp
Email opened timestamp
Reply timestamp
Lead creation timestamp
Custom lead fields
Current sequence step
When the next pending follow-up is scheduled
Whether email was opened
Whether lead replied
Whether lead unsubscribed
Delivery status from Azure (latest email)
Team-level suppression computed on read: the lead's email is on the team unsubscribe list, so it will be skipped when sending. Not a LeadStatus — it can coexist with any status.
Latest INTENT-group thread tag across the lead's threads (rollup)
Show child attributes
Show child attributes
Was this page helpful?

