Create Campaign
curl --request POST \
--url https://api.kakiyo.com/v1/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q2 Sales Outreach",
"productId": "prod_123456789",
"promptId": "prompt_987654321",
"agentId": "agent_abcdef123456",
"qualificationAutomatic": 75,
"qualificationVerification": 50,
"variables": {
"companyValue": "Our AI-powered sales enablement platform",
"painPoint": "low response rates on cold outreach",
"benefit": "3x more qualified meetings"
},
"preventAutoStart": false
}
'import requests
url = "https://api.kakiyo.com/v1/campaigns"
payload = {
"name": "Q2 Sales Outreach",
"productId": "prod_123456789",
"promptId": "prompt_987654321",
"agentId": "agent_abcdef123456",
"qualificationAutomatic": 75,
"qualificationVerification": 50,
"variables": {
"companyValue": "Our AI-powered sales enablement platform",
"painPoint": "low response rates on cold outreach",
"benefit": "3x more qualified meetings"
},
"preventAutoStart": False
}
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({
name: 'Q2 Sales Outreach',
productId: 'prod_123456789',
promptId: 'prompt_987654321',
agentId: 'agent_abcdef123456',
qualificationAutomatic: 75,
qualificationVerification: 50,
variables: {
companyValue: 'Our AI-powered sales enablement platform',
painPoint: 'low response rates on cold outreach',
benefit: '3x more qualified meetings'
},
preventAutoStart: false
})
};
fetch('https://api.kakiyo.com/v1/campaigns', 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/campaigns",
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([
'name' => 'Q2 Sales Outreach',
'productId' => 'prod_123456789',
'promptId' => 'prompt_987654321',
'agentId' => 'agent_abcdef123456',
'qualificationAutomatic' => 75,
'qualificationVerification' => 50,
'variables' => [
'companyValue' => 'Our AI-powered sales enablement platform',
'painPoint' => 'low response rates on cold outreach',
'benefit' => '3x more qualified meetings'
],
'preventAutoStart' => false
]),
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/campaigns"
payload := strings.NewReader("{\n \"name\": \"Q2 Sales Outreach\",\n \"productId\": \"prod_123456789\",\n \"promptId\": \"prompt_987654321\",\n \"agentId\": \"agent_abcdef123456\",\n \"qualificationAutomatic\": 75,\n \"qualificationVerification\": 50,\n \"variables\": {\n \"companyValue\": \"Our AI-powered sales enablement platform\",\n \"painPoint\": \"low response rates on cold outreach\",\n \"benefit\": \"3x more qualified meetings\"\n },\n \"preventAutoStart\": false\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/campaigns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Q2 Sales Outreach\",\n \"productId\": \"prod_123456789\",\n \"promptId\": \"prompt_987654321\",\n \"agentId\": \"agent_abcdef123456\",\n \"qualificationAutomatic\": 75,\n \"qualificationVerification\": 50,\n \"variables\": {\n \"companyValue\": \"Our AI-powered sales enablement platform\",\n \"painPoint\": \"low response rates on cold outreach\",\n \"benefit\": \"3x more qualified meetings\"\n },\n \"preventAutoStart\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kakiyo.com/v1/campaigns")
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 \"name\": \"Q2 Sales Outreach\",\n \"productId\": \"prod_123456789\",\n \"promptId\": \"prompt_987654321\",\n \"agentId\": \"agent_abcdef123456\",\n \"qualificationAutomatic\": 75,\n \"qualificationVerification\": 50,\n \"variables\": {\n \"companyValue\": \"Our AI-powered sales enablement platform\",\n \"painPoint\": \"low response rates on cold outreach\",\n \"benefit\": \"3x more qualified meetings\"\n },\n \"preventAutoStart\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "campaign_12345abcde",
"name": "Q2 Sales Outreach",
"status": "active",
"preventAutoStart": false
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}Campaigns
Create Campaign
Creates a new outreach campaign
POST
/
campaigns
Create Campaign
curl --request POST \
--url https://api.kakiyo.com/v1/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q2 Sales Outreach",
"productId": "prod_123456789",
"promptId": "prompt_987654321",
"agentId": "agent_abcdef123456",
"qualificationAutomatic": 75,
"qualificationVerification": 50,
"variables": {
"companyValue": "Our AI-powered sales enablement platform",
"painPoint": "low response rates on cold outreach",
"benefit": "3x more qualified meetings"
},
"preventAutoStart": false
}
'import requests
url = "https://api.kakiyo.com/v1/campaigns"
payload = {
"name": "Q2 Sales Outreach",
"productId": "prod_123456789",
"promptId": "prompt_987654321",
"agentId": "agent_abcdef123456",
"qualificationAutomatic": 75,
"qualificationVerification": 50,
"variables": {
"companyValue": "Our AI-powered sales enablement platform",
"painPoint": "low response rates on cold outreach",
"benefit": "3x more qualified meetings"
},
"preventAutoStart": False
}
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({
name: 'Q2 Sales Outreach',
productId: 'prod_123456789',
promptId: 'prompt_987654321',
agentId: 'agent_abcdef123456',
qualificationAutomatic: 75,
qualificationVerification: 50,
variables: {
companyValue: 'Our AI-powered sales enablement platform',
painPoint: 'low response rates on cold outreach',
benefit: '3x more qualified meetings'
},
preventAutoStart: false
})
};
fetch('https://api.kakiyo.com/v1/campaigns', 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/campaigns",
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([
'name' => 'Q2 Sales Outreach',
'productId' => 'prod_123456789',
'promptId' => 'prompt_987654321',
'agentId' => 'agent_abcdef123456',
'qualificationAutomatic' => 75,
'qualificationVerification' => 50,
'variables' => [
'companyValue' => 'Our AI-powered sales enablement platform',
'painPoint' => 'low response rates on cold outreach',
'benefit' => '3x more qualified meetings'
],
'preventAutoStart' => false
]),
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/campaigns"
payload := strings.NewReader("{\n \"name\": \"Q2 Sales Outreach\",\n \"productId\": \"prod_123456789\",\n \"promptId\": \"prompt_987654321\",\n \"agentId\": \"agent_abcdef123456\",\n \"qualificationAutomatic\": 75,\n \"qualificationVerification\": 50,\n \"variables\": {\n \"companyValue\": \"Our AI-powered sales enablement platform\",\n \"painPoint\": \"low response rates on cold outreach\",\n \"benefit\": \"3x more qualified meetings\"\n },\n \"preventAutoStart\": false\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/campaigns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Q2 Sales Outreach\",\n \"productId\": \"prod_123456789\",\n \"promptId\": \"prompt_987654321\",\n \"agentId\": \"agent_abcdef123456\",\n \"qualificationAutomatic\": 75,\n \"qualificationVerification\": 50,\n \"variables\": {\n \"companyValue\": \"Our AI-powered sales enablement platform\",\n \"painPoint\": \"low response rates on cold outreach\",\n \"benefit\": \"3x more qualified meetings\"\n },\n \"preventAutoStart\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kakiyo.com/v1/campaigns")
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 \"name\": \"Q2 Sales Outreach\",\n \"productId\": \"prod_123456789\",\n \"promptId\": \"prompt_987654321\",\n \"agentId\": \"agent_abcdef123456\",\n \"qualificationAutomatic\": 75,\n \"qualificationVerification\": 50,\n \"variables\": {\n \"companyValue\": \"Our AI-powered sales enablement platform\",\n \"painPoint\": \"low response rates on cold outreach\",\n \"benefit\": \"3x more qualified meetings\"\n },\n \"preventAutoStart\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "campaign_12345abcde",
"name": "Q2 Sales Outreach",
"status": "active",
"preventAutoStart": false
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}{
"error": "validation_error",
"message": "The request parameters failed validation",
"details": [
{
"field": "name",
"message": "The name field is required"
}
]
}Overview
Create a new LinkedIn outreach campaign with AI-powered automation. This endpoint sets up a complete campaign with specified products, prompts, and agents, ready to start prospecting.Use Cases
- New Product Launch: Create campaigns for new product introductions
- Market Expansion: Set up campaigns for new geographic markets
- Seasonal Campaigns: Launch time-sensitive promotional campaigns
- A/B Testing: Create multiple campaigns to test different approaches
- Delayed Launch: Create campaigns early (with
preventAutoStart: true), upload leads, and launch later when ready
Key Features
- AI-Powered Messaging: Automated message generation using specified prompts
- Smart Qualification: Automatic prospect qualification based on responses
- Agent Assignment: Dedicated LinkedIn agents for authentic outreach
- Performance Tracking: Built-in analytics and conversion tracking
- Prevent Auto-Start: Optionally keep campaigns paused through lead uploads until you manually resume
Testing Example
curl -X POST "https://api.kakiyo.com/v1/campaigns" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Q4 Enterprise Outreach",
"productId": "prod_123456789",
"promptId": "prompt_987654321",
"agentId": "agent_abcdef123456",
"variables": {
"company_name": "Your Company",
"value_proposition": "20% increase in sales efficiency"
}
}'
# Create a campaign that stays paused until manually resumed
curl -X POST "https://api.kakiyo.com/v1/campaigns" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Delayed Launch Campaign",
"productId": "prod_123456789",
"promptId": "prompt_987654321",
"agentId": "agent_abcdef123456",
"variables": {},
"preventAutoStart": true
}'
// JavaScript/Node.js
const createCampaign = async (campaignData) => {
const response = await fetch('https://api.kakiyo.com/v1/campaigns', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(campaignData)
});
return await response.json();
};
// Usage example
// Create campaign (starts active immediately)
const newCampaign = await createCampaign({
name: 'Q4 Enterprise Outreach',
productId: 'prod_123456789',
promptId: 'prompt_987654321',
agentId: 'agent_abcdef123456',
variables: {
company_name: 'Your Company',
value_proposition: '20% increase in sales efficiency'
}
});
// Create campaign that stays paused until manually resumed
const delayedCampaign = await createCampaign({
name: 'Delayed Launch Campaign',
productId: 'prod_123456789',
promptId: 'prompt_987654321',
agentId: 'agent_abcdef123456',
variables: {},
preventAutoStart: true
});
console.log('Campaign Created:', newCampaign);
# Python
import requests
def create_campaign(campaign_data):
"""Create a new LinkedIn outreach campaign"""
response = requests.post(
'https://api.kakiyo.com/v1/campaigns',
json=campaign_data,
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
)
return response.json()
# Usage example
campaign_data = {
'name': 'Q4 Enterprise Outreach',
'productId': 'prod_123456789',
'promptId': 'prompt_987654321',
'agentId': 'agent_abcdef123456',
'variables': {
'company_name': 'Your Company',
'value_proposition': '20% increase in sales efficiency'
}
}
result = create_campaign(campaign_data)
print('Campaign Created:', result)
# Create campaign that stays paused until manually resumed
delayed_campaign = create_campaign({
'name': 'Delayed Launch Campaign',
'productId': 'prod_123456789',
'promptId': 'prompt_987654321',
'agentId': 'agent_abcdef123456',
'variables': {},
'preventAutoStart': True
})
print('Delayed Campaign:', delayed_campaign)
Prevent Auto-Start
By default, campaigns become active immediately and start outreach as soon as leads are uploaded. If you need to build campaigns ahead of time and launch later:- Set
preventAutoStart: truewhen creating the campaign - Upload your leads — the campaign stays paused
- When ready, call
POST /campaigns/{id}/resumeto activate
preventAutoStart flag, so subsequent uploads behave normally.
Best Practices
- Descriptive Names: Use clear, descriptive campaign names
- Variable Planning: Define all necessary variables before campaign creation
- Agent Capacity: Ensure assigned agents have available capacity
- Testing: Create test campaigns before launching to large prospect lists
- Delayed Launch: Use
preventAutoStart: truefor campaigns you want to prepare in advance
Next Steps
After creating a campaign:- Add Prospects: Use
/prospectsor/prospects/batchendpoints - Monitor Performance: Check campaign analytics regularly
- Optimize Settings: Adjust qualification thresholds based on results
- Scale Gradually: Start with smaller prospect lists and scale up
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Campaign to create
Required string length:
3 - 100Example:
"Q2 Sales Outreach"
Example:
"prod_123456789"
Example:
"prompt_987654321"
Example:
"agent_abcdef123456"
Required range:
0 <= x <= 100Example:
75
Required range:
0 <= x <= 100Example:
50
Example:
{
"companyValue": "Our AI-powered sales enablement platform",
"painPoint": "low response rates on cold outreach",
"benefit": "3x more qualified meetings"
}
If true, campaign starts paused and stays paused after lead uploads until manually resumed. Defaults to false (immediate auto-activation).
Example:
false
Last modified on February 25, 2026

