curl --request POST \
--url https://api.reply.io/v3/email-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Welcome email",
"subject": "Welcome to our service",
"body": "<p>Hello {{firstName}},</p><p>Welcome aboard!</p>",
"folderId": 5,
"folderType": "personal",
"attachmentIds": [
42,
43
]
}
'import requests
url = "https://api.reply.io/v3/email-templates"
payload = {
"name": "Welcome email",
"subject": "Welcome to our service",
"body": "<p>Hello {{firstName}},</p><p>Welcome aboard!</p>",
"folderId": 5,
"folderType": "personal",
"attachmentIds": [42, 43]
}
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',
subject: 'Welcome to our service',
body: JSON.stringify('<p>Hello {{firstName}},</p><p>Welcome aboard!</p>'),
folderId: 5,
folderType: 'personal',
attachmentIds: [42, 43]
})
};
fetch('https://api.reply.io/v3/email-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.reply.io/v3/email-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',
'subject' => 'Welcome to our service',
'body' => '<p>Hello {{firstName}},</p><p>Welcome aboard!</p>',
'folderId' => 5,
'folderType' => 'personal',
'attachmentIds' => [
42,
43
]
]),
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.reply.io/v3/email-templates"
payload := strings.NewReader("{\n \"name\": \"Welcome email\",\n \"subject\": \"Welcome to our service\",\n \"body\": \"<p>Hello {{firstName}},</p><p>Welcome aboard!</p>\",\n \"folderId\": 5,\n \"folderType\": \"personal\",\n \"attachmentIds\": [\n 42,\n 43\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.reply.io/v3/email-templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Welcome email\",\n \"subject\": \"Welcome to our service\",\n \"body\": \"<p>Hello {{firstName}},</p><p>Welcome aboard!</p>\",\n \"folderId\": 5,\n \"folderType\": \"personal\",\n \"attachmentIds\": [\n 42,\n 43\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-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 \"subject\": \"Welcome to our service\",\n \"body\": \"<p>Hello {{firstName}},</p><p>Welcome aboard!</p>\",\n \"folderId\": 5,\n \"folderType\": \"personal\",\n \"attachmentIds\": [\n 42,\n 43\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 101,
"name": "Follow-up template",
"subject": "Quick follow-up",
"body": "<p>Hi {{firstName}},</p>",
"folderId": 5,
"folderType": "personal",
"attachments": [],
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-02-20T14:00:00Z"
}Create an email template
sequences:write scope (or a broader one that includes it).
Store a reusable email as a template. Name, body, and folderType are required; folderType is personal or team.
curl --request POST \
--url https://api.reply.io/v3/email-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Welcome email",
"subject": "Welcome to our service",
"body": "<p>Hello {{firstName}},</p><p>Welcome aboard!</p>",
"folderId": 5,
"folderType": "personal",
"attachmentIds": [
42,
43
]
}
'import requests
url = "https://api.reply.io/v3/email-templates"
payload = {
"name": "Welcome email",
"subject": "Welcome to our service",
"body": "<p>Hello {{firstName}},</p><p>Welcome aboard!</p>",
"folderId": 5,
"folderType": "personal",
"attachmentIds": [42, 43]
}
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',
subject: 'Welcome to our service',
body: JSON.stringify('<p>Hello {{firstName}},</p><p>Welcome aboard!</p>'),
folderId: 5,
folderType: 'personal',
attachmentIds: [42, 43]
})
};
fetch('https://api.reply.io/v3/email-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.reply.io/v3/email-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',
'subject' => 'Welcome to our service',
'body' => '<p>Hello {{firstName}},</p><p>Welcome aboard!</p>',
'folderId' => 5,
'folderType' => 'personal',
'attachmentIds' => [
42,
43
]
]),
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.reply.io/v3/email-templates"
payload := strings.NewReader("{\n \"name\": \"Welcome email\",\n \"subject\": \"Welcome to our service\",\n \"body\": \"<p>Hello {{firstName}},</p><p>Welcome aboard!</p>\",\n \"folderId\": 5,\n \"folderType\": \"personal\",\n \"attachmentIds\": [\n 42,\n 43\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.reply.io/v3/email-templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Welcome email\",\n \"subject\": \"Welcome to our service\",\n \"body\": \"<p>Hello {{firstName}},</p><p>Welcome aboard!</p>\",\n \"folderId\": 5,\n \"folderType\": \"personal\",\n \"attachmentIds\": [\n 42,\n 43\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-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 \"subject\": \"Welcome to our service\",\n \"body\": \"<p>Hello {{firstName}},</p><p>Welcome aboard!</p>\",\n \"folderId\": 5,\n \"folderType\": \"personal\",\n \"attachmentIds\": [\n 42,\n 43\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 101,
"name": "Follow-up template",
"subject": "Quick follow-up",
"body": "<p>Hi {{firstName}},</p>",
"folderId": 5,
"folderType": "personal",
"attachments": [],
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-02-20T14:00:00Z"
}Authorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Body
Request body for creating a new email template.
Name of the email template
255HTML body of the email template
Type of the folder
personal, team Email subject line
ID of the folder to place the template in
List of previously uploaded attachment IDs to associate with the template
3Response
Email template created successfully
Full representation of an email template including timestamps.
Unique identifier for the email template
Name of the email template
Email subject line
HTML body of the email template
ID of the folder containing this template
Type of the folder (e.g., "personal", "shared")
List of attachments associated with the template
Show child attributes
Show child attributes
Timestamp when the template was created
Timestamp when the template was last updated