Add prospects to a campaign
curl --request POST \
--url https://api.altahq.com/v1/campaigns/{campaignId}/prospects \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": [
{
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"jobTitle": "<string>",
"email": "<string>",
"linkedinUrl": "<string>"
}
]
}
'import requests
url = "https://api.altahq.com/v1/campaigns/{campaignId}/prospects"
payload = { "data": [
{
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"jobTitle": "<string>",
"email": "<string>",
"linkedinUrl": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: [
{
firstName: '<string>',
lastName: '<string>',
company: '<string>',
jobTitle: '<string>',
email: '<string>',
linkedinUrl: '<string>'
}
]
})
};
fetch('https://api.altahq.com/v1/campaigns/{campaignId}/prospects', 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.altahq.com/v1/campaigns/{campaignId}/prospects",
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([
'data' => [
[
'firstName' => '<string>',
'lastName' => '<string>',
'company' => '<string>',
'jobTitle' => '<string>',
'email' => '<string>',
'linkedinUrl' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.altahq.com/v1/campaigns/{campaignId}/prospects"
payload := strings.NewReader("{\n \"data\": [\n {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"jobTitle\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedinUrl\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.altahq.com/v1/campaigns/{campaignId}/prospects")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": [\n {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"jobTitle\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedinUrl\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.altahq.com/v1/campaigns/{campaignId}/prospects")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": [\n {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"jobTitle\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedinUrl\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"error": "ValidationError",
"message": "Invalid request body"
}{
"error": "Unauthorized",
"message": "Invalid API token"
}{
"error": "NotFound",
"message": "Resource not found"
}{
"error": "TooManyRequests",
"message": "Rate limit exceeded. Please retry after 60 seconds."
}Campaigns
Add prospects to a campaign
Adds up to 20 prospects to a campaign’s audience list. Each prospect must have at least one contact method (email, linkedinUrl, phone) or full identity (firstName, lastName, company). Rate limited to 10 requests per minute.
POST
/
campaigns
/
{campaignId}
/
prospects
Add prospects to a campaign
curl --request POST \
--url https://api.altahq.com/v1/campaigns/{campaignId}/prospects \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": [
{
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"jobTitle": "<string>",
"email": "<string>",
"linkedinUrl": "<string>"
}
]
}
'import requests
url = "https://api.altahq.com/v1/campaigns/{campaignId}/prospects"
payload = { "data": [
{
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"jobTitle": "<string>",
"email": "<string>",
"linkedinUrl": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: [
{
firstName: '<string>',
lastName: '<string>',
company: '<string>',
jobTitle: '<string>',
email: '<string>',
linkedinUrl: '<string>'
}
]
})
};
fetch('https://api.altahq.com/v1/campaigns/{campaignId}/prospects', 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.altahq.com/v1/campaigns/{campaignId}/prospects",
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([
'data' => [
[
'firstName' => '<string>',
'lastName' => '<string>',
'company' => '<string>',
'jobTitle' => '<string>',
'email' => '<string>',
'linkedinUrl' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.altahq.com/v1/campaigns/{campaignId}/prospects"
payload := strings.NewReader("{\n \"data\": [\n {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"jobTitle\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedinUrl\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.altahq.com/v1/campaigns/{campaignId}/prospects")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": [\n {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"jobTitle\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedinUrl\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.altahq.com/v1/campaigns/{campaignId}/prospects")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": [\n {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"jobTitle\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedinUrl\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"error": "ValidationError",
"message": "Invalid request body"
}{
"error": "Unauthorized",
"message": "Invalid API token"
}{
"error": "NotFound",
"message": "Resource not found"
}{
"error": "TooManyRequests",
"message": "Rate limit exceeded. Please retry after 60 seconds."
}Rate limited to 10 requests per minute. Each request can include up to 20 prospects.
Every prospect must have at least one contact method (email, linkedinUrl, phone) or full identity (firstName, lastName, company).
Authorizations
API token authentication. Generate a token from the Alta dashboard and pass it as a Bearer token in the Authorization header.
Path Parameters
The UUID of the campaign to add prospects to.
Body
application/json
Array of prospect records to add. Each must have at least one contact method (email, linkedinUrl, phone) or full identity (firstName, lastName, company).
Required array length:
1 - 20 elementsShow child attributes
Show child attributes
Response
Prospects added successfully