curl --request PUT \
--url https://api.reply.io/v3/email-templates/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated welcome email",
"subject": "Welcome!",
"body": "<p>Hi {{firstName}},</p><p>Updated content.</p>",
"attachmentIds": [
42
]
}
'import requests
url = "https://api.reply.io/v3/email-templates/{id}"
payload = {
"name": "Updated welcome email",
"subject": "Welcome!",
"body": "<p>Hi {{firstName}},</p><p>Updated content.</p>",
"attachmentIds": [42]
}
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: 'Updated welcome email',
subject: 'Welcome!',
body: JSON.stringify('<p>Hi {{firstName}},</p><p>Updated content.</p>'),
attachmentIds: [42]
})
};
fetch('https://api.reply.io/v3/email-templates/{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.reply.io/v3/email-templates/{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' => 'Updated welcome email',
'subject' => 'Welcome!',
'body' => '<p>Hi {{firstName}},</p><p>Updated content.</p>',
'attachmentIds' => [
42
]
]),
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/{id}"
payload := strings.NewReader("{\n \"name\": \"Updated welcome email\",\n \"subject\": \"Welcome!\",\n \"body\": \"<p>Hi {{firstName}},</p><p>Updated content.</p>\",\n \"attachmentIds\": [\n 42\n ]\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.reply.io/v3/email-templates/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated welcome email\",\n \"subject\": \"Welcome!\",\n \"body\": \"<p>Hi {{firstName}},</p><p>Updated content.</p>\",\n \"attachmentIds\": [\n 42\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-templates/{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\": \"Updated welcome email\",\n \"subject\": \"Welcome!\",\n \"body\": \"<p>Hi {{firstName}},</p><p>Updated content.</p>\",\n \"attachmentIds\": [\n 42\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"
}Update an email template
sequences:write scope (or a broader one that includes it).
Change a template’s content. Name and body are required every time, so send it in full — anything left out is overwritten.
curl --request PUT \
--url https://api.reply.io/v3/email-templates/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated welcome email",
"subject": "Welcome!",
"body": "<p>Hi {{firstName}},</p><p>Updated content.</p>",
"attachmentIds": [
42
]
}
'import requests
url = "https://api.reply.io/v3/email-templates/{id}"
payload = {
"name": "Updated welcome email",
"subject": "Welcome!",
"body": "<p>Hi {{firstName}},</p><p>Updated content.</p>",
"attachmentIds": [42]
}
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: 'Updated welcome email',
subject: 'Welcome!',
body: JSON.stringify('<p>Hi {{firstName}},</p><p>Updated content.</p>'),
attachmentIds: [42]
})
};
fetch('https://api.reply.io/v3/email-templates/{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.reply.io/v3/email-templates/{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' => 'Updated welcome email',
'subject' => 'Welcome!',
'body' => '<p>Hi {{firstName}},</p><p>Updated content.</p>',
'attachmentIds' => [
42
]
]),
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/{id}"
payload := strings.NewReader("{\n \"name\": \"Updated welcome email\",\n \"subject\": \"Welcome!\",\n \"body\": \"<p>Hi {{firstName}},</p><p>Updated content.</p>\",\n \"attachmentIds\": [\n 42\n ]\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.reply.io/v3/email-templates/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated welcome email\",\n \"subject\": \"Welcome!\",\n \"body\": \"<p>Hi {{firstName}},</p><p>Updated content.</p>\",\n \"attachmentIds\": [\n 42\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-templates/{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\": \"Updated welcome email\",\n \"subject\": \"Welcome!\",\n \"body\": \"<p>Hi {{firstName}},</p><p>Updated content.</p>\",\n \"attachmentIds\": [\n 42\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.
Path Parameters
Email template ID
Body
Request body for updating an existing email template.
Response
Email template updated 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