curl --request POST \
--url https://api.reply.io/v3/sequences/create-from-template \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequenceFolderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.reply.io/v3/sequences/create-from-template"
payload = {
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequenceFolderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
templateId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sequenceFolderId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.reply.io/v3/sequences/create-from-template', 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/sequences/create-from-template",
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([
'templateId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'sequenceFolderId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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/sequences/create-from-template"
payload := strings.NewReader("{\n \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sequenceFolderId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/sequences/create-from-template")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sequenceFolderId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/create-from-template")
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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sequenceFolderId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"ownerUserId": 42,
"name": "Sales Outreach 2024",
"created": "2024-03-08T14:30:00+00:00",
"status": "active",
"isArchived": false,
"health": "degraded",
"scheduleId": 1,
"emailAccounts": [
{
"id": 1,
"email": "sales@company.com"
},
{
"id": 2,
"email": "outreach@company.com"
}
],
"linkedInAccounts": [
{
"id": 42,
"name": "John Doe",
"profileUrl": "https://www.linkedin.com/in/johndoe",
"status": "enabled"
}
],
"settings": {
"emailsCountPerDay": 50,
"daysToFinishProspect": 14,
"emailSendingDelaySeconds": 30,
"dailyThrottling": 200,
"disableOpensTracking": false,
"repliesHandlingType": "markAsFinished",
"enableLinksTracking": true
},
"steps": [
{
"id": 1323,
"type": "email",
"delayInMinutes": 0,
"executionMode": "automatic",
"variants": [
{
"id": 1,
"subject": "Quick question about {{companyName}}",
"message": "<p>Hi {{firstName}},</p><p>I noticed you are leading initiatives at {{companyName}} and wanted to reach out.</p><p>Best regards, John</p>"
}
]
},
{
"id": 43432,
"type": "linkedIn",
"actionType": "message",
"delayInMinutes": 2880,
"executionMode": "automatic",
"variants": [
{
"id": 2,
"message": "Hi {{firstName}}, I noticed your great work at {{companyName}}. Would love to connect!",
"isEnabled": true
}
]
}
]
}{
"title": "Validation failed",
"status": 400,
"detail": "The request body contains validation errors.",
"errors": [
{
"pointer": "/templateId",
"detail": "'templateId' must not be empty."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "You do not have permission to view this sequence.",
"code": "sequence.forbidden"
}{
"title": "Not Found",
"status": 404,
"detail": "Sequence template with ID 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d not found.",
"code": "sequenceTemplate.notFound"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 60 seconds."
}Create a sequence from a template
sequences:write scope (or a broader one that includes it).
Build a new sequence from one of your saved templates. Pass templateId, and optionally a folder to file it into.
curl --request POST \
--url https://api.reply.io/v3/sequences/create-from-template \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequenceFolderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.reply.io/v3/sequences/create-from-template"
payload = {
"templateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequenceFolderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
templateId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sequenceFolderId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.reply.io/v3/sequences/create-from-template', 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/sequences/create-from-template",
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([
'templateId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'sequenceFolderId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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/sequences/create-from-template"
payload := strings.NewReader("{\n \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sequenceFolderId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/sequences/create-from-template")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sequenceFolderId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/create-from-template")
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 \"templateId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"sequenceFolderId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"ownerUserId": 42,
"name": "Sales Outreach 2024",
"created": "2024-03-08T14:30:00+00:00",
"status": "active",
"isArchived": false,
"health": "degraded",
"scheduleId": 1,
"emailAccounts": [
{
"id": 1,
"email": "sales@company.com"
},
{
"id": 2,
"email": "outreach@company.com"
}
],
"linkedInAccounts": [
{
"id": 42,
"name": "John Doe",
"profileUrl": "https://www.linkedin.com/in/johndoe",
"status": "enabled"
}
],
"settings": {
"emailsCountPerDay": 50,
"daysToFinishProspect": 14,
"emailSendingDelaySeconds": 30,
"dailyThrottling": 200,
"disableOpensTracking": false,
"repliesHandlingType": "markAsFinished",
"enableLinksTracking": true
},
"steps": [
{
"id": 1323,
"type": "email",
"delayInMinutes": 0,
"executionMode": "automatic",
"variants": [
{
"id": 1,
"subject": "Quick question about {{companyName}}",
"message": "<p>Hi {{firstName}},</p><p>I noticed you are leading initiatives at {{companyName}} and wanted to reach out.</p><p>Best regards, John</p>"
}
]
},
{
"id": 43432,
"type": "linkedIn",
"actionType": "message",
"delayInMinutes": 2880,
"executionMode": "automatic",
"variants": [
{
"id": 2,
"message": "Hi {{firstName}}, I noticed your great work at {{companyName}}. Would love to connect!",
"isEnabled": true
}
]
}
]
}{
"title": "Validation failed",
"status": 400,
"detail": "The request body contains validation errors.",
"errors": [
{
"pointer": "/templateId",
"detail": "'templateId' must not be empty."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "You do not have permission to view this sequence.",
"code": "sequence.forbidden"
}{
"title": "Not Found",
"status": 404,
"detail": "Sequence template with ID 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d not found.",
"code": "sequenceTemplate.notFound"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 60 seconds."
}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
Response
Sequence created from template successfully
Full representation of a sequence, including its schedule and the email and LinkedIn accounts used to send from it.
Unique identifier for the sequence
Identifier of the user who owns the sequence
Name of the sequence
Sequence creation timestamp with timezone offset
Current status of the sequence
new, active, paused Indicates if the sequence is archived
Overall health status of the sequence. Indicates whether the sequence can operate normally or has issues that need attention.
healthy— Sequence is functioning normally with no issuesstalled— Sequence has stalled and is not progressingdegraded— Sequence is running but with reduced effectivenessblocked— Sequence cannot proceed due to critical issues
healthy, stalled, degraded, blocked Schedule ID
Email accounts used to send emails for this sequence
Show child attributes
Show child attributes
LinkedIn accounts linked to this sequence
Show child attributes
Show child attributes
Settings configuration for a sequence
Show child attributes
Show child attributes
Array of sequence steps
Email step with variant configuration
- Email
- LinkedIn Message
- LinkedIn Connect
- LinkedIn InMail
- LinkedIn View Profile
- LinkedIn Endorse Skills
- LinkedIn Voice Message
- LinkedIn AI Voice Message
- LinkedIn Like Recent Posts
- LinkedIn Follow Profile
- LinkedIn Comment On Recent Post
- Call
- SMS
- WhatsApp
- Zapier
- Task
- Condition
Show child attributes
Show child attributes