curl --request GET \
--url https://api.reply.io/v3/ai-sdr/sequence-structures/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/ai-sdr/sequence-structures/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/ai-sdr/sequence-structures/{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/ai-sdr/sequence-structures/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/ai-sdr/sequence-structures/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reply.io/v3/ai-sdr/sequence-structures/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/sequence-structures/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "c-128",
"name": "Email + LinkedIn, 5 steps",
"channels": [
"email"
],
"scope": "library"
}{
"title": "Bad Request",
"status": 400,
"detail": "Sequence structure id 'x-1' is invalid. Expected 'g-{number}' or 'c-{number}'.",
"code": "sequenceStructure.invalidIdFormat"
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "AI SDR feature is not available for your team.",
"code": "sequenceStructure.forbidden"
}{
"title": "Not Found",
"status": 404,
"detail": "Sequence structure 'c-128' not found.",
"code": "sequenceStructure.notFound"
}{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service failure: Service unavailable.",
"code": "sequenceStructure.upstreamFailure"
}Get a sequence structure
Coming soon. This endpoint will be available by late October 2026.
ai-sdr:read scope (or a broader one that includes it).
Read one sequence structure by id: its name, the channels its steps use, and its scope.
curl --request GET \
--url https://api.reply.io/v3/ai-sdr/sequence-structures/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/ai-sdr/sequence-structures/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/ai-sdr/sequence-structures/{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/ai-sdr/sequence-structures/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/ai-sdr/sequence-structures/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reply.io/v3/ai-sdr/sequence-structures/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/sequence-structures/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "c-128",
"name": "Email + LinkedIn, 5 steps",
"channels": [
"email"
],
"scope": "library"
}{
"title": "Bad Request",
"status": 400,
"detail": "Sequence structure id 'x-1' is invalid. Expected 'g-{number}' or 'c-{number}'.",
"code": "sequenceStructure.invalidIdFormat"
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "AI SDR feature is not available for your team.",
"code": "sequenceStructure.forbidden"
}{
"title": "Not Found",
"status": 404,
"detail": "Sequence structure 'c-128' not found.",
"code": "sequenceStructure.notFound"
}{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service failure: Service unavailable.",
"code": "sequenceStructure.upstreamFailure"
}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
Structure id. g-{number} for library structures, c-{number} for structures saved by users (e.g. g-3, c-128).
Response
Sequence structure
A reusable outline of AI SDR sequence steps: which channels the steps use and in what order. Applying a structure to an AI SDR sequence replaces the sequence's steps.
Structure id. g-{number} for library structures, c-{number} for structures saved by users (e.g. g-3, c-128).
"c-128"
Display name of the structure
"Email + LinkedIn, 5 steps"
Step channels the structure uses
Channel of an AI SDR sequence step.
email, linkedIn, call, linkedInInMail, linkedInAiVoice Who a sequence structure is shared with.
library— Reply-curated structures, available to every team. Read-only.personal— saved by the caller, visible to the caller only.team— visible to the caller's team.organization— visible to every team in the caller's organization. Available to organization accounts only.
library, personal, team, organization