Add people to a campaign
curl --request POST \
--url https://api.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"lead_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"force": false,
"use_openers": true
}
'import requests
url = "https://api.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll"
payload = {
"lead_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"force": False,
"use_openers": True
}
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({
lead_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
force: false,
use_openers: true
})
};
fetch('https://api.b2bsignals.ai/api/v1/workflows/{workflow_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.b2bsignals.ai/api/v1/workflows/{workflow_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([
'lead_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'force' => false,
'use_openers' => true
]),
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.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll"
payload := strings.NewReader("{\n \"lead_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"force\": false,\n \"use_openers\": true\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.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"lead_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"force\": false,\n \"use_openers\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll")
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 \"lead_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"force\": false,\n \"use_openers\": true\n}"
response = http.request(request)
puts response.read_body{
"enrolled": 0,
"skipped_suppressed": 0,
"skipped_active": 0,
"skipped_no_trigger": 0,
"skipped_already_connected": 0,
"skipped_competitor_domain": 0,
"skipped_busy": 0,
"skipped_teammate_domain": 0,
"skipped_rejected": 0,
"skipped_exclude_list": 0,
"skipped_contacted_other_campaign": 0,
"skipped_messaged_other_sender": 0,
"skipped_same_sender_other_campaign": 0,
"skipped_company_blacklist": 0,
"skipped_excluded_country": 0,
"skipped_in_other_tool": 0,
"skipped_campaign_ended": 0,
"skipped_name_unresolved": 0,
"skipped_own_team": 0,
"skipped_needs_review": 0,
"skipped_contacted_elsewhere": 0,
"skipped_other": 0,
"errors": [
"<string>"
],
"openers_used": 0,
"opener_review": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Campaigns
Add people to a campaign
Adds up to 200 people by id. The response counts who was added and who was skipped, by reason. Do not contact always applies, even with force. Adding someone does not send anything by itself: the campaign’s schedule, limits and approvals still decide when a message goes.
POST
/
workflows
/
{workflow_id}
/
enroll
Add people to a campaign
curl --request POST \
--url https://api.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"lead_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"force": false,
"use_openers": true
}
'import requests
url = "https://api.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll"
payload = {
"lead_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"force": False,
"use_openers": True
}
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({
lead_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
force: false,
use_openers: true
})
};
fetch('https://api.b2bsignals.ai/api/v1/workflows/{workflow_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.b2bsignals.ai/api/v1/workflows/{workflow_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([
'lead_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'force' => false,
'use_openers' => true
]),
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.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll"
payload := strings.NewReader("{\n \"lead_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"force\": false,\n \"use_openers\": true\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.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"lead_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"force\": false,\n \"use_openers\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.b2bsignals.ai/api/v1/workflows/{workflow_id}/enroll")
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 \"lead_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"force\": false,\n \"use_openers\": true\n}"
response = http.request(request)
puts response.read_body{
"enrolled": 0,
"skipped_suppressed": 0,
"skipped_active": 0,
"skipped_no_trigger": 0,
"skipped_already_connected": 0,
"skipped_competitor_domain": 0,
"skipped_busy": 0,
"skipped_teammate_domain": 0,
"skipped_rejected": 0,
"skipped_exclude_list": 0,
"skipped_contacted_other_campaign": 0,
"skipped_messaged_other_sender": 0,
"skipped_same_sender_other_campaign": 0,
"skipped_company_blacklist": 0,
"skipped_excluded_country": 0,
"skipped_in_other_tool": 0,
"skipped_campaign_ended": 0,
"skipped_name_unresolved": 0,
"skipped_own_team": 0,
"skipped_needs_review": 0,
"skipped_contacted_elsewhere": 0,
"skipped_other": 0,
"errors": [
"<string>"
],
"openers_used": 0,
"opener_review": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Your workspace's API key. It starts with b2b_sk_.
Path Parameters
Body
application/json
1 to 200 person ids. Ids we do not know are skipped.
Required array length:
1 - 200 elementsAdd them even if they are active in another campaign. Do not contact still applies.
Use a person's saved opener for the first message or invite note.
Response
Success