curl --request POST \
--url https://api.monaco.com/v1/campaigns/{campaign_id}/enroll \
--header 'Content-Type: application/json' \
--data '
{
"audience_name": "Q3 Enterprise Outbound — July batch",
"contact_ids": [
"550e8400-e29b-41d4-a716-446655440020"
]
}
'import requests
url = "https://api.monaco.com/v1/campaigns/{campaign_id}/enroll"
payload = {
"audience_name": "Q3 Enterprise Outbound — July batch",
"contact_ids": ["550e8400-e29b-41d4-a716-446655440020"]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
audience_name: 'Q3 Enterprise Outbound — July batch',
contact_ids: ['550e8400-e29b-41d4-a716-446655440020']
})
};
fetch('https://api.monaco.com/v1/campaigns/{campaign_id}/enroll', 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.monaco.com/v1/campaigns/{campaign_id}/enroll",
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([
'audience_name' => 'Q3 Enterprise Outbound — July batch',
'contact_ids' => [
'550e8400-e29b-41d4-a716-446655440020'
]
]),
CURLOPT_HTTPHEADER => [
"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.monaco.com/v1/campaigns/{campaign_id}/enroll"
payload := strings.NewReader("{\n \"audience_name\": \"Q3 Enterprise Outbound — July batch\",\n \"contact_ids\": [\n \"550e8400-e29b-41d4-a716-446655440020\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.monaco.com/v1/campaigns/{campaign_id}/enroll")
.header("Content-Type", "application/json")
.body("{\n \"audience_name\": \"Q3 Enterprise Outbound — July batch\",\n \"contact_ids\": [\n \"550e8400-e29b-41d4-a716-446655440020\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monaco.com/v1/campaigns/{campaign_id}/enroll")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"audience_name\": \"Q3 Enterprise Outbound — July batch\",\n \"contact_ids\": [\n \"550e8400-e29b-41d4-a716-446655440020\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"success_count": 3,
"failure_count": 1,
"failure_reasons": [
{
"code": "contact_not_found",
"description": "contact not found",
"count": 1
}
]
},
"meta": {
"timestamp": "2026-07-09T10:30:00Z"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}Enroll Contacts in a Campaign
Enrolls contacts into a campaign by creating a new audience named audience_name, attaching it to the campaign, and adding the contacts to it. The campaign must be active or paused.
This always creates a new audience. Audiences can be shared across campaigns, so a contact added to one is enrolled in every campaign using it.
curl --request POST \
--url https://api.monaco.com/v1/campaigns/{campaign_id}/enroll \
--header 'Content-Type: application/json' \
--data '
{
"audience_name": "Q3 Enterprise Outbound — July batch",
"contact_ids": [
"550e8400-e29b-41d4-a716-446655440020"
]
}
'import requests
url = "https://api.monaco.com/v1/campaigns/{campaign_id}/enroll"
payload = {
"audience_name": "Q3 Enterprise Outbound — July batch",
"contact_ids": ["550e8400-e29b-41d4-a716-446655440020"]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
audience_name: 'Q3 Enterprise Outbound — July batch',
contact_ids: ['550e8400-e29b-41d4-a716-446655440020']
})
};
fetch('https://api.monaco.com/v1/campaigns/{campaign_id}/enroll', 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.monaco.com/v1/campaigns/{campaign_id}/enroll",
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([
'audience_name' => 'Q3 Enterprise Outbound — July batch',
'contact_ids' => [
'550e8400-e29b-41d4-a716-446655440020'
]
]),
CURLOPT_HTTPHEADER => [
"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.monaco.com/v1/campaigns/{campaign_id}/enroll"
payload := strings.NewReader("{\n \"audience_name\": \"Q3 Enterprise Outbound — July batch\",\n \"contact_ids\": [\n \"550e8400-e29b-41d4-a716-446655440020\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.monaco.com/v1/campaigns/{campaign_id}/enroll")
.header("Content-Type", "application/json")
.body("{\n \"audience_name\": \"Q3 Enterprise Outbound — July batch\",\n \"contact_ids\": [\n \"550e8400-e29b-41d4-a716-446655440020\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monaco.com/v1/campaigns/{campaign_id}/enroll")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"audience_name\": \"Q3 Enterprise Outbound — July batch\",\n \"contact_ids\": [\n \"550e8400-e29b-41d4-a716-446655440020\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"success_count": 3,
"failure_count": 1,
"failure_reasons": [
{
"code": "contact_not_found",
"description": "contact not found",
"count": 1
}
]
},
"meta": {
"timestamp": "2026-07-09T10:30:00Z"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}Path Parameters
Body
Name for the new audience created to hold these contacts; pick something short and relevant to the enrollment. Must be unique within the organization — a duplicate name is rejected, so vary it and retry.
1 - 255"Q3 Enterprise Outbound — July batch"
IDs of the contacts to enroll in the campaign
1 - 10000 elements["550e8400-e29b-41d4-a716-446655440020"]
Response
Successful Response
Aggregate outcome of enrolling contacts into a campaign.
Counts reflect contacts added to the campaign's new audience. Sequence creation happens asynchronously, so contacts already enrolled in the campaign are deduplicated later and still count as successes here.
Show child attributes
Show child attributes
Show child attributes
Show child attributes