curl --request POST \
--url https://api.sendkit.dev/senders \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "John Doe",
"username": "john",
"domain_id": "550e8400-e29b-41d4-a716-446655440000",
"reply_to": "reply@yourdomain.com"
}
'import requests
url = "https://api.sendkit.dev/senders"
payload = {
"name": "John Doe",
"username": "john",
"domain_id": "550e8400-e29b-41d4-a716-446655440000",
"reply_to": "reply@yourdomain.com"
}
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: 'John Doe',
username: 'john',
domain_id: '550e8400-e29b-41d4-a716-446655440000',
reply_to: 'reply@yourdomain.com'
})
};
fetch('https://api.sendkit.dev/senders', 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/senders",
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' => 'John Doe',
'username' => 'john',
'domain_id' => '550e8400-e29b-41d4-a716-446655440000',
'reply_to' => 'reply@yourdomain.com'
]),
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/senders"
payload := strings.NewReader("{\n \"name\": \"John Doe\",\n \"username\": \"john\",\n \"domain_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"reply_to\": \"reply@yourdomain.com\"\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.sendkit.dev/senders")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"John Doe\",\n \"username\": \"john\",\n \"domain_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"reply_to\": \"reply@yourdomain.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendkit.dev/senders")
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\": \"John Doe\",\n \"username\": \"john\",\n \"domain_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"reply_to\": \"reply@yourdomain.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "John Doe",
"username": "john",
"email": "john@yourdomain.com",
"reply_to": "reply@yourdomain.com",
"domain": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "yourdomain.com",
"status": "verified",
"region": "us-east-2",
"open_tracking": true,
"click_tracking": true,
"tls": "opportunistic",
"sending_enabled": true,
"created_at": "2026-03-03 10:00:00",
"updated_at": "2026-03-03 10:00:00"
},
"created_at": "2026-03-03 10:00:00",
"updated_at": "2026-03-03 10:00:00"
}{
"message": "Invalid API key."
}{
"message": "The email field is required."
}Create a sender
Create a new sender identity. The sender must be associated with a verified domain that belongs to your account.
curl --request POST \
--url https://api.sendkit.dev/senders \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "John Doe",
"username": "john",
"domain_id": "550e8400-e29b-41d4-a716-446655440000",
"reply_to": "reply@yourdomain.com"
}
'import requests
url = "https://api.sendkit.dev/senders"
payload = {
"name": "John Doe",
"username": "john",
"domain_id": "550e8400-e29b-41d4-a716-446655440000",
"reply_to": "reply@yourdomain.com"
}
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: 'John Doe',
username: 'john',
domain_id: '550e8400-e29b-41d4-a716-446655440000',
reply_to: 'reply@yourdomain.com'
})
};
fetch('https://api.sendkit.dev/senders', 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/senders",
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' => 'John Doe',
'username' => 'john',
'domain_id' => '550e8400-e29b-41d4-a716-446655440000',
'reply_to' => 'reply@yourdomain.com'
]),
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/senders"
payload := strings.NewReader("{\n \"name\": \"John Doe\",\n \"username\": \"john\",\n \"domain_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"reply_to\": \"reply@yourdomain.com\"\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.sendkit.dev/senders")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"John Doe\",\n \"username\": \"john\",\n \"domain_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"reply_to\": \"reply@yourdomain.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendkit.dev/senders")
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\": \"John Doe\",\n \"username\": \"john\",\n \"domain_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"reply_to\": \"reply@yourdomain.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "John Doe",
"username": "john",
"email": "john@yourdomain.com",
"reply_to": "reply@yourdomain.com",
"domain": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "yourdomain.com",
"status": "verified",
"region": "us-east-2",
"open_tracking": true,
"click_tracking": true,
"tls": "opportunistic",
"sending_enabled": true,
"created_at": "2026-03-03 10:00:00",
"updated_at": "2026-03-03 10:00:00"
},
"created_at": "2026-03-03 10:00:00",
"updated_at": "2026-03-03 10:00:00"
}{
"message": "Invalid API key."
}{
"message": "The email field is required."
}Authorizations
API key from your SendKit dashboard. Pass it as a Bearer token in the Authorization header.
Body
The sender display name.
255"John Doe"
The username part of the email address. May only contain letters, numbers, dots, underscores, percent signs, plus signs, and hyphens. Must be unique per domain.
64"john"
The ID of a verified domain that belongs to your account.
"550e8400-e29b-41d4-a716-446655440000"
The reply-to email address.
255"reply@yourdomain.com"
Response
Sender created successfully
Unique identifier.
"550e8400-e29b-41d4-a716-446655440000"
The sender display name.
"John Doe"
The username part of the sender email address.
"john"
The full sender email address (computed from username and domain).
"john@yourdomain.com"
The reply-to email address.
"reply@yourdomain.com"
The domain associated with this sender (without DNS records).
Show child attributes
Show child attributes
When the sender was created.
"2026-03-03 10:00:00"
When the sender was last updated.
"2026-03-03 10:00:00"

