curl --request POST \
--url https://api.sendkit.dev/templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Welcome Email",
"sender_id": "550e8400-e29b-41d4-a716-446655440000",
"subject": "Welcome to {{COMPANY}}",
"folder_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"html_content": "<h1>Welcome, {{FIRST_NAME}}!</h1>",
"text_content": "Welcome, {{FIRST_NAME}}!",
"reply_to": "support@yourdomain.com",
"status": "published",
"variables": [
{
"key": "FIRST_NAME",
"type": "string",
"fallback_value": "there"
}
]
}
'import requests
url = "https://api.sendkit.dev/templates"
payload = {
"name": "Welcome Email",
"sender_id": "550e8400-e29b-41d4-a716-446655440000",
"subject": "Welcome to {{COMPANY}}",
"folder_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"html_content": "<h1>Welcome, {{FIRST_NAME}}!</h1>",
"text_content": "Welcome, {{FIRST_NAME}}!",
"reply_to": "support@yourdomain.com",
"status": "published",
"variables": [
{
"key": "FIRST_NAME",
"type": "string",
"fallback_value": "there"
}
]
}
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: 'Welcome Email',
sender_id: '550e8400-e29b-41d4-a716-446655440000',
subject: 'Welcome to {{COMPANY}}',
folder_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
html_content: '<h1>Welcome, {{FIRST_NAME}}!</h1>',
text_content: 'Welcome, {{FIRST_NAME}}!',
reply_to: 'support@yourdomain.com',
status: 'published',
variables: [{key: 'FIRST_NAME', type: 'string', fallback_value: 'there'}]
})
};
fetch('https://api.sendkit.dev/templates', 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/templates",
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' => 'Welcome Email',
'sender_id' => '550e8400-e29b-41d4-a716-446655440000',
'subject' => 'Welcome to {{COMPANY}}',
'folder_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'html_content' => '<h1>Welcome, {{FIRST_NAME}}!</h1>',
'text_content' => 'Welcome, {{FIRST_NAME}}!',
'reply_to' => 'support@yourdomain.com',
'status' => 'published',
'variables' => [
[
'key' => 'FIRST_NAME',
'type' => 'string',
'fallback_value' => 'there'
]
]
]),
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/templates"
payload := strings.NewReader("{\n \"name\": \"Welcome Email\",\n \"sender_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"subject\": \"Welcome to {{COMPANY}}\",\n \"folder_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"html_content\": \"<h1>Welcome, {{FIRST_NAME}}!</h1>\",\n \"text_content\": \"Welcome, {{FIRST_NAME}}!\",\n \"reply_to\": \"support@yourdomain.com\",\n \"status\": \"published\",\n \"variables\": [\n {\n \"key\": \"FIRST_NAME\",\n \"type\": \"string\",\n \"fallback_value\": \"there\"\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.sendkit.dev/templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Welcome Email\",\n \"sender_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"subject\": \"Welcome to {{COMPANY}}\",\n \"folder_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"html_content\": \"<h1>Welcome, {{FIRST_NAME}}!</h1>\",\n \"text_content\": \"Welcome, {{FIRST_NAME}}!\",\n \"reply_to\": \"support@yourdomain.com\",\n \"status\": \"published\",\n \"variables\": [\n {\n \"key\": \"FIRST_NAME\",\n \"type\": \"string\",\n \"fallback_value\": \"there\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendkit.dev/templates")
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\": \"Welcome Email\",\n \"sender_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"subject\": \"Welcome to {{COMPANY}}\",\n \"folder_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"html_content\": \"<h1>Welcome, {{FIRST_NAME}}!</h1>\",\n \"text_content\": \"Welcome, {{FIRST_NAME}}!\",\n \"reply_to\": \"support@yourdomain.com\",\n \"status\": \"published\",\n \"variables\": [\n {\n \"key\": \"FIRST_NAME\",\n \"type\": \"string\",\n \"fallback_value\": \"there\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"folder_id": null,
"name": "Welcome Email",
"subject": "Welcome to {{COMPANY}}",
"html_content": "<h1>Welcome, {{FIRST_NAME}}!</h1><p>Thanks for joining.</p>",
"text_content": "Welcome, {{FIRST_NAME}}! Thanks for joining.",
"reply_to": "support@yourdomain.com",
"status": "published",
"sender": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "John Doe",
"username": "john",
"email": "john@yourdomain.com",
"reply_to": "reply@yourdomain.com",
"created_at": "2026-03-03 10:00:00",
"updated_at": "2026-03-03 10:00:00"
},
"variables": [
{
"key": "FIRST_NAME",
"type": "string",
"fallback_value": "there"
}
],
"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 template
Create a new email template. Templates allow you to reuse email content and sender settings across transactional emails and campaigns.
curl --request POST \
--url https://api.sendkit.dev/templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Welcome Email",
"sender_id": "550e8400-e29b-41d4-a716-446655440000",
"subject": "Welcome to {{COMPANY}}",
"folder_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"html_content": "<h1>Welcome, {{FIRST_NAME}}!</h1>",
"text_content": "Welcome, {{FIRST_NAME}}!",
"reply_to": "support@yourdomain.com",
"status": "published",
"variables": [
{
"key": "FIRST_NAME",
"type": "string",
"fallback_value": "there"
}
]
}
'import requests
url = "https://api.sendkit.dev/templates"
payload = {
"name": "Welcome Email",
"sender_id": "550e8400-e29b-41d4-a716-446655440000",
"subject": "Welcome to {{COMPANY}}",
"folder_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"html_content": "<h1>Welcome, {{FIRST_NAME}}!</h1>",
"text_content": "Welcome, {{FIRST_NAME}}!",
"reply_to": "support@yourdomain.com",
"status": "published",
"variables": [
{
"key": "FIRST_NAME",
"type": "string",
"fallback_value": "there"
}
]
}
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: 'Welcome Email',
sender_id: '550e8400-e29b-41d4-a716-446655440000',
subject: 'Welcome to {{COMPANY}}',
folder_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
html_content: '<h1>Welcome, {{FIRST_NAME}}!</h1>',
text_content: 'Welcome, {{FIRST_NAME}}!',
reply_to: 'support@yourdomain.com',
status: 'published',
variables: [{key: 'FIRST_NAME', type: 'string', fallback_value: 'there'}]
})
};
fetch('https://api.sendkit.dev/templates', 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/templates",
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' => 'Welcome Email',
'sender_id' => '550e8400-e29b-41d4-a716-446655440000',
'subject' => 'Welcome to {{COMPANY}}',
'folder_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'html_content' => '<h1>Welcome, {{FIRST_NAME}}!</h1>',
'text_content' => 'Welcome, {{FIRST_NAME}}!',
'reply_to' => 'support@yourdomain.com',
'status' => 'published',
'variables' => [
[
'key' => 'FIRST_NAME',
'type' => 'string',
'fallback_value' => 'there'
]
]
]),
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/templates"
payload := strings.NewReader("{\n \"name\": \"Welcome Email\",\n \"sender_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"subject\": \"Welcome to {{COMPANY}}\",\n \"folder_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"html_content\": \"<h1>Welcome, {{FIRST_NAME}}!</h1>\",\n \"text_content\": \"Welcome, {{FIRST_NAME}}!\",\n \"reply_to\": \"support@yourdomain.com\",\n \"status\": \"published\",\n \"variables\": [\n {\n \"key\": \"FIRST_NAME\",\n \"type\": \"string\",\n \"fallback_value\": \"there\"\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.sendkit.dev/templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Welcome Email\",\n \"sender_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"subject\": \"Welcome to {{COMPANY}}\",\n \"folder_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"html_content\": \"<h1>Welcome, {{FIRST_NAME}}!</h1>\",\n \"text_content\": \"Welcome, {{FIRST_NAME}}!\",\n \"reply_to\": \"support@yourdomain.com\",\n \"status\": \"published\",\n \"variables\": [\n {\n \"key\": \"FIRST_NAME\",\n \"type\": \"string\",\n \"fallback_value\": \"there\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendkit.dev/templates")
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\": \"Welcome Email\",\n \"sender_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"subject\": \"Welcome to {{COMPANY}}\",\n \"folder_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"html_content\": \"<h1>Welcome, {{FIRST_NAME}}!</h1>\",\n \"text_content\": \"Welcome, {{FIRST_NAME}}!\",\n \"reply_to\": \"support@yourdomain.com\",\n \"status\": \"published\",\n \"variables\": [\n {\n \"key\": \"FIRST_NAME\",\n \"type\": \"string\",\n \"fallback_value\": \"there\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"folder_id": null,
"name": "Welcome Email",
"subject": "Welcome to {{COMPANY}}",
"html_content": "<h1>Welcome, {{FIRST_NAME}}!</h1><p>Thanks for joining.</p>",
"text_content": "Welcome, {{FIRST_NAME}}! Thanks for joining.",
"reply_to": "support@yourdomain.com",
"status": "published",
"sender": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "John Doe",
"username": "john",
"email": "john@yourdomain.com",
"reply_to": "reply@yourdomain.com",
"created_at": "2026-03-03 10:00:00",
"updated_at": "2026-03-03 10:00:00"
},
"variables": [
{
"key": "FIRST_NAME",
"type": "string",
"fallback_value": "there"
}
],
"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 name of the template.
255"Welcome Email"
The ID of the sender to use for this template. Must belong to your account.
"550e8400-e29b-41d4-a716-446655440000"
The email subject line. Supports {{VARIABLE}} placeholders.
255"Welcome to {{COMPANY}}"
Optional folder ID to organize the template.
The HTML content of the template. Supports {{VARIABLE}} placeholders.
"<h1>Welcome, {{FIRST_NAME}}!</h1>"
The plain text content of the template. Supports {{VARIABLE}} placeholders.
"Welcome, {{FIRST_NAME}}!"
The reply-to email address.
255"support@yourdomain.com"
The template status. Defaults to published.
published, draft "published"
Template variables configuration.
Show child attributes
Show child attributes
Response
Template created successfully
Unique identifier.
"550e8400-e29b-41d4-a716-446655440000"
The folder this template belongs to. Null if unassigned.
null
The name of the template.
"Welcome Email"
The email subject line.
"Welcome to {{COMPANY}}"
The HTML content of the template.
"<h1>Welcome, {{FIRST_NAME}}!</h1><p>Thanks for joining.</p>"
The plain text content of the template.
"Welcome, {{FIRST_NAME}}! Thanks for joining."
The reply-to email address for emails sent with this template.
"support@yourdomain.com"
The template status. Only published templates can be used for sending.
published, draft "published"
The sender associated with this template.
Show child attributes
Show child attributes
The template variables and their configuration.
Show child attributes
Show child attributes
When the template was created.
"2026-03-03 10:00:00"
When the template was last updated.
"2026-03-03 10:00:00"

