List contacts in sequence
curl --request GET \
--url https://api.reply.io/v3/sequences/{id}/contacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/sequences/{id}/contacts"
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/sequences/{id}/contacts', 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/{id}/contacts",
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/sequences/{id}/contacts"
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/sequences/{id}/contacts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/{id}/contacts")
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{
"items": [
{
"contactId": 12345,
"sequenceId": 100,
"email": "john.doe@company.com",
"firstName": "John",
"lastName": "Doe",
"company": "Tech Solutions Inc",
"title": "Senior Product Manager",
"statusInSequence": "active",
"isOptedOut": false,
"callStatus": "none",
"meetingStatus": "none",
"emailDisposition": {
"isReplied": false,
"isBounced": false
},
"currentStep": {
"stepId": 5421,
"displayName": "2"
},
"addingDate": "2024-03-08T10:00:00+00:00",
"emailAccountId": 101,
"linkedInAccountId": null
}
],
"hasMore": true
}Sequence Contacts
List contacts in sequence
Requires the
sequences:read scope (or a broader one that includes it).
See who’s enrolled in a sequence and where each stands: status, current step, added date, opt-out, and call status.
GET
/
v3
/
sequences
/
{id}
/
contacts
List contacts in sequence
curl --request GET \
--url https://api.reply.io/v3/sequences/{id}/contacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/sequences/{id}/contacts"
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/sequences/{id}/contacts', 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/{id}/contacts",
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/sequences/{id}/contacts"
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/sequences/{id}/contacts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/{id}/contacts")
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{
"items": [
{
"contactId": 12345,
"sequenceId": 100,
"email": "john.doe@company.com",
"firstName": "John",
"lastName": "Doe",
"company": "Tech Solutions Inc",
"title": "Senior Product Manager",
"statusInSequence": "active",
"isOptedOut": false,
"callStatus": "none",
"meetingStatus": "none",
"emailDisposition": {
"isReplied": false,
"isBounced": false
},
"currentStep": {
"stepId": 5421,
"displayName": "2"
},
"addingDate": "2024-03-08T10:00:00+00:00",
"emailAccountId": 101,
"linkedInAccountId": null
}
],
"hasMore": true
}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
Sequence ID
Query Parameters
Maximum number of items to return (default 25, max 1000)
Number of items to skip
Field name to sort results by. Each value matches the corresponding response field. When omitted, results are ordered most-recently-added first.
Available options:
addingDate, email, firstName, lastName, company, statusInSequence Sort direction (asc or desc). Defaults to desc when sort_by is provided.
Available options:
asc, desc