Add Prospects Batch (Round Robin)
curl --request POST \
--url https://api.kakiyo.com/v1/prospects/batch/round-robin \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"campaignIds": [
"campaign_12345abcde",
"campaign_67890fghij",
"campaign_11223klmno"
],
"prospects": [
{
"name": "John Smith",
"url": "https://linkedin.com/in/johnsmith",
"ongoing": false,
"customData": "John commented on Liam's LinkedIn post about AI outbound."
}
]
}
EOFimport requests
url = "https://api.kakiyo.com/v1/prospects/batch/round-robin"
payload = {
"campaignIds": ["campaign_12345abcde", "campaign_67890fghij", "campaign_11223klmno"],
"prospects": [
{
"name": "John Smith",
"url": "https://linkedin.com/in/johnsmith",
"ongoing": False,
"customData": "John commented on Liam's LinkedIn post about AI outbound."
}
]
}
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({
campaignIds: ['campaign_12345abcde', 'campaign_67890fghij', 'campaign_11223klmno'],
prospects: [
{
name: 'John Smith',
url: 'https://linkedin.com/in/johnsmith',
ongoing: false,
customData: 'John commented on Liam\'s LinkedIn post about AI outbound.'
}
]
})
};
fetch('https://api.kakiyo.com/v1/prospects/batch/round-robin', 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.kakiyo.com/v1/prospects/batch/round-robin",
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([
'campaignIds' => [
'campaign_12345abcde',
'campaign_67890fghij',
'campaign_11223klmno'
],
'prospects' => [
[
'name' => 'John Smith',
'url' => 'https://linkedin.com/in/johnsmith',
'ongoing' => false,
'customData' => 'John commented on Liam\'s LinkedIn post about AI outbound.'
]
]
]),
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.kakiyo.com/v1/prospects/batch/round-robin"
payload := strings.NewReader("{\n \"campaignIds\": [\n \"campaign_12345abcde\",\n \"campaign_67890fghij\",\n \"campaign_11223klmno\"\n ],\n \"prospects\": [\n {\n \"name\": \"John Smith\",\n \"url\": \"https://linkedin.com/in/johnsmith\",\n \"ongoing\": false,\n \"customData\": \"John commented on Liam's LinkedIn post about AI outbound.\"\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.kakiyo.com/v1/prospects/batch/round-robin")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"campaignIds\": [\n \"campaign_12345abcde\",\n \"campaign_67890fghij\",\n \"campaign_11223klmno\"\n ],\n \"prospects\": [\n {\n \"name\": \"John Smith\",\n \"url\": \"https://linkedin.com/in/johnsmith\",\n \"ongoing\": false,\n \"customData\": \"John commented on Liam's LinkedIn post about AI outbound.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kakiyo.com/v1/prospects/batch/round-robin")
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 \"campaignIds\": [\n \"campaign_12345abcde\",\n \"campaign_67890fghij\",\n \"campaign_11223klmno\"\n ],\n \"prospects\": [\n {\n \"name\": \"John Smith\",\n \"url\": \"https://linkedin.com/in/johnsmith\",\n \"ongoing\": false,\n \"customData\": \"John commented on Liam's LinkedIn post about AI outbound.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Round Robin distribution processing started",
"totalProspects": 3,
"campaignsCount": 3,
"distribution": [
{
"campaignId": "campaign_12345abcde",
"campaignName": "Q4 Enterprise Outreach",
"listId": "import_list_id",
"prospectsAssigned": 1
}
]
}{
"error": "invalid_campaigns",
"message": "Minimum 2 campaigns required for Round Robin distribution"
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}{
"error": "forbidden",
"message": "Campaign campaign_12345abcde does not belong to your team"
}{
"error": "campaign_not_found",
"message": "Campaign campaign_12345abcde not found"
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}Prospects
Add prospects batch (Round Robin)
Distributes a batch of prospects evenly across multiple campaigns using intelligent load balancing
POST
/
prospects
/
batch
/
round-robin
Add Prospects Batch (Round Robin)
curl --request POST \
--url https://api.kakiyo.com/v1/prospects/batch/round-robin \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"campaignIds": [
"campaign_12345abcde",
"campaign_67890fghij",
"campaign_11223klmno"
],
"prospects": [
{
"name": "John Smith",
"url": "https://linkedin.com/in/johnsmith",
"ongoing": false,
"customData": "John commented on Liam's LinkedIn post about AI outbound."
}
]
}
EOFimport requests
url = "https://api.kakiyo.com/v1/prospects/batch/round-robin"
payload = {
"campaignIds": ["campaign_12345abcde", "campaign_67890fghij", "campaign_11223klmno"],
"prospects": [
{
"name": "John Smith",
"url": "https://linkedin.com/in/johnsmith",
"ongoing": False,
"customData": "John commented on Liam's LinkedIn post about AI outbound."
}
]
}
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({
campaignIds: ['campaign_12345abcde', 'campaign_67890fghij', 'campaign_11223klmno'],
prospects: [
{
name: 'John Smith',
url: 'https://linkedin.com/in/johnsmith',
ongoing: false,
customData: 'John commented on Liam\'s LinkedIn post about AI outbound.'
}
]
})
};
fetch('https://api.kakiyo.com/v1/prospects/batch/round-robin', 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.kakiyo.com/v1/prospects/batch/round-robin",
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([
'campaignIds' => [
'campaign_12345abcde',
'campaign_67890fghij',
'campaign_11223klmno'
],
'prospects' => [
[
'name' => 'John Smith',
'url' => 'https://linkedin.com/in/johnsmith',
'ongoing' => false,
'customData' => 'John commented on Liam\'s LinkedIn post about AI outbound.'
]
]
]),
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.kakiyo.com/v1/prospects/batch/round-robin"
payload := strings.NewReader("{\n \"campaignIds\": [\n \"campaign_12345abcde\",\n \"campaign_67890fghij\",\n \"campaign_11223klmno\"\n ],\n \"prospects\": [\n {\n \"name\": \"John Smith\",\n \"url\": \"https://linkedin.com/in/johnsmith\",\n \"ongoing\": false,\n \"customData\": \"John commented on Liam's LinkedIn post about AI outbound.\"\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.kakiyo.com/v1/prospects/batch/round-robin")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"campaignIds\": [\n \"campaign_12345abcde\",\n \"campaign_67890fghij\",\n \"campaign_11223klmno\"\n ],\n \"prospects\": [\n {\n \"name\": \"John Smith\",\n \"url\": \"https://linkedin.com/in/johnsmith\",\n \"ongoing\": false,\n \"customData\": \"John commented on Liam's LinkedIn post about AI outbound.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kakiyo.com/v1/prospects/batch/round-robin")
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 \"campaignIds\": [\n \"campaign_12345abcde\",\n \"campaign_67890fghij\",\n \"campaign_11223klmno\"\n ],\n \"prospects\": [\n {\n \"name\": \"John Smith\",\n \"url\": \"https://linkedin.com/in/johnsmith\",\n \"ongoing\": false,\n \"customData\": \"John commented on Liam's LinkedIn post about AI outbound.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Round Robin distribution processing started",
"totalProspects": 3,
"campaignsCount": 3,
"distribution": [
{
"campaignId": "campaign_12345abcde",
"campaignName": "Q4 Enterprise Outreach",
"listId": "import_list_id",
"prospectsAssigned": 1
}
]
}{
"error": "invalid_campaigns",
"message": "Minimum 2 campaigns required for Round Robin distribution"
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}{
"error": "forbidden",
"message": "Campaign campaign_12345abcde does not belong to your team"
}{
"error": "campaign_not_found",
"message": "Campaign campaign_12345abcde not found"
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}Overview
Distribute a batch of prospects across multiple campaigns. Kakiyo assigns prospects to campaigns with the lowest current workload and starts an asynchronous import for each campaign that receives prospects. Each prospect can includecustomData, a string up to 3000 characters. It is saved on the created chat and available in prompts as {{customData}}.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
campaignIds | array<string> | Yes | Campaign IDs to distribute prospects across. Minimum 2 campaigns |
prospects | array<object> | Yes | Prospects to distribute. Minimum 1 prospect |
Prospect object
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Prospect full name |
url | string | Yes | LinkedIn profile URL |
ongoing | boolean | No | Whether the conversation should start as ongoing. Defaults to false |
customData | string | No | Per-conversation prompt context, max 3000 characters |
Example
curl -X POST "https://api.kakiyo.com/v1/prospects/batch/round-robin" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaignIds": [
"campaign_12345abcde",
"campaign_67890fghij"
],
"prospects": [
{
"name": "John Smith",
"url": "https://linkedin.com/in/johnsmith",
"customData": "John commented on Liam's LinkedIn post about AI outbound."
},
{
"name": "Sarah Johnson",
"url": "https://linkedin.com/in/sarahjohnson",
"customData": "Sarah engaged with a Kakiyo post about sales automation."
}
]
}'
Response
{
"message": "Round Robin distribution processing started",
"totalProspects": 2,
"campaignsCount": 2,
"successfulCampaignIds": ["campaign_12345abcde", "campaign_67890fghij"],
"distribution": [
{
"campaignId": "campaign_12345abcde",
"campaignName": "Campaign A",
"listId": "import_list_id_a",
"prospectsAssigned": 1
},
{
"campaignId": "campaign_67890fghij",
"campaignName": "Campaign B",
"listId": "import_list_id_b",
"prospectsAssigned": 1
}
]
}
listId with Prospect Import Status. A prospect should be considered confirmed only when its report row has chatCreated: true.
Notes
- All campaigns must belong to your team.
- Campaigns cannot be in
draft,disabled, or already uploading. - Round-robin processing is asynchronous per campaign.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Prospects to distribute across campaigns
Last modified on June 20, 2026
⌘I

