curl --request PUT \
--url https://api.sendkit.dev/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"subject": "<string>",
"email_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"audience_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"preview_text": "<string>",
"reply_to": "jsmith@example.com",
"scheduled_at": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.sendkit.dev/campaigns/{id}"
payload = {
"name": "<string>",
"subject": "<string>",
"email_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"audience_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"preview_text": "<string>",
"reply_to": "jsmith@example.com",
"scheduled_at": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
subject: '<string>',
email_template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sender_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
audience_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
preview_text: '<string>',
reply_to: 'jsmith@example.com',
scheduled_at: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.sendkit.dev/campaigns/{id}', 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.sendkit.dev/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'subject' => '<string>',
'email_template_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'sender_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'audience_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'preview_text' => '<string>',
'reply_to' => 'jsmith@example.com',
'scheduled_at' => '2023-11-07T05:31:56Z'
]),
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.sendkit.dev/campaigns/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"subject\": \"<string>\",\n \"email_template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sender_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"audience_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"preview_text\": \"<string>\",\n \"reply_to\": \"jsmith@example.com\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sendkit.dev/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"subject\": \"<string>\",\n \"email_template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sender_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"audience_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"preview_text\": \"<string>\",\n \"reply_to\": \"jsmith@example.com\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendkit.dev/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"subject\": \"<string>\",\n \"email_template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sender_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"audience_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"preview_text\": \"<string>\",\n \"reply_to\": \"jsmith@example.com\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "March Newsletter",
"subject": "Our latest updates",
"preview_text": "Check out what's new",
"reply_to": "support@example.com",
"status": "draft",
"audience_type": "contact_list",
"audience_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"template": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Newsletter Template"
},
"sender": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Marketing Team",
"email": "marketing@example.com"
},
"total_recipients": 1500,
"sent_count": 1200,
"failed_count": 5,
"scheduled_at": "2026-03-15 10:00:00",
"sent_at": "2026-03-11 14:30:00",
"created_at": "2026-03-10 09:00:00"
}{
"message": "Invalid API key."
}{
"message": "Not found."
}{
"message": "The email field is required."
}Update a campaign
Update a campaign’s settings. Only draft campaigns can be updated. You can configure the name, subject, template, sender, audience, preview text, reply-to address, and schedule.
curl --request PUT \
--url https://api.sendkit.dev/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"subject": "<string>",
"email_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"audience_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"preview_text": "<string>",
"reply_to": "jsmith@example.com",
"scheduled_at": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.sendkit.dev/campaigns/{id}"
payload = {
"name": "<string>",
"subject": "<string>",
"email_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"audience_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"preview_text": "<string>",
"reply_to": "jsmith@example.com",
"scheduled_at": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
subject: '<string>',
email_template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sender_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
audience_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
preview_text: '<string>',
reply_to: 'jsmith@example.com',
scheduled_at: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.sendkit.dev/campaigns/{id}', 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.sendkit.dev/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'subject' => '<string>',
'email_template_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'sender_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'audience_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'preview_text' => '<string>',
'reply_to' => 'jsmith@example.com',
'scheduled_at' => '2023-11-07T05:31:56Z'
]),
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.sendkit.dev/campaigns/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"subject\": \"<string>\",\n \"email_template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sender_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"audience_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"preview_text\": \"<string>\",\n \"reply_to\": \"jsmith@example.com\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sendkit.dev/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"subject\": \"<string>\",\n \"email_template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sender_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"audience_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"preview_text\": \"<string>\",\n \"reply_to\": \"jsmith@example.com\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendkit.dev/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"subject\": \"<string>\",\n \"email_template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sender_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"audience_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"preview_text\": \"<string>\",\n \"reply_to\": \"jsmith@example.com\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "March Newsletter",
"subject": "Our latest updates",
"preview_text": "Check out what's new",
"reply_to": "support@example.com",
"status": "draft",
"audience_type": "contact_list",
"audience_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"template": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Newsletter Template"
},
"sender": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Marketing Team",
"email": "marketing@example.com"
},
"total_recipients": 1500,
"sent_count": 1200,
"failed_count": 5,
"scheduled_at": "2026-03-15 10:00:00",
"sent_at": "2026-03-11 14:30:00",
"created_at": "2026-03-10 09:00:00"
}{
"message": "Invalid API key."
}{
"message": "Not found."
}{
"message": "The email field is required."
}Authorizations
API key from your SendKit dashboard. Pass it as a Bearer token in the Authorization header.
Path Parameters
The campaign ID.
Body
The campaign name.
255The email subject line.
255The email template ID to use.
The sender ID to send from.
The audience type.
all_contacts, contact_list, segment The contact list or segment ID. Required when audience_type is contact_list or segment.
Preview text shown in email clients.
255Reply-to email address.
255Schedule the campaign for a future date. Must be in the future.
Response
Campaign updated successfully
"550e8400-e29b-41d4-a716-446655440000"
"March Newsletter"
"Our latest updates"
"Check out what's new"
"support@example.com"
draft, scheduled, sending, sent, partial_sent "draft"
all_contacts, contact_list, segment "contact_list"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
1500
1200
5
"2026-03-15 10:00:00"
"2026-03-11 14:30:00"
"2026-03-10 09:00:00"

