curl --request GET \
--url http://localhost:8080/sequences/{sequenceId}/stats \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/sequences/{sequenceId}/stats"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:8080/sequences/{sequenceId}/stats', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/sequences/{sequenceId}/stats",
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 := "http://localhost:8080/sequences/{sequenceId}/stats"
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("http://localhost:8080/sequences/{sequenceId}/stats")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/sequences/{sequenceId}/stats")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"people": 0,
"will_send": 0,
"might_send": 0,
"rejected": 0,
"enrolled": 0,
"has_criteria": true,
"sent": 0,
"replied": 0,
"wont_reach": 0,
"needs_you": 0,
"finished": true,
"busy": true,
"unreachable": [
{
"contact_id": "<string>",
"display_name": "<string>",
"phone": "<string>",
"email": "<string>",
"whatsapp_user_id": "<string>",
"avatar_url": "<string>",
"reason": "<string>",
"event": "<string>",
"step_index": 0
}
],
"blocked": [
{
"contact_id": "<string>",
"display_name": "<string>",
"phone": "<string>",
"email": "<string>",
"whatsapp_user_id": "<string>",
"avatar_url": "<string>",
"reason": "<string>",
"event": "<string>",
"step_index": 0
}
]
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Get an outbound sequence's numbers
Read one sequence’s numbers plus who will never be reached and who is waiting on a human, with reasons. Use to act on stuck people rather than just count them.
curl --request GET \
--url http://localhost:8080/sequences/{sequenceId}/stats \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/sequences/{sequenceId}/stats"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:8080/sequences/{sequenceId}/stats', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/sequences/{sequenceId}/stats",
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 := "http://localhost:8080/sequences/{sequenceId}/stats"
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("http://localhost:8080/sequences/{sequenceId}/stats")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/sequences/{sequenceId}/stats")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"people": 0,
"will_send": 0,
"might_send": 0,
"rejected": 0,
"enrolled": 0,
"has_criteria": true,
"sent": 0,
"replied": 0,
"wont_reach": 0,
"needs_you": 0,
"finished": true,
"busy": true,
"unreachable": [
{
"contact_id": "<string>",
"display_name": "<string>",
"phone": "<string>",
"email": "<string>",
"whatsapp_user_id": "<string>",
"avatar_url": "<string>",
"reason": "<string>",
"event": "<string>",
"step_index": 0
}
],
"blocked": [
{
"contact_id": "<string>",
"display_name": "<string>",
"phone": "<string>",
"email": "<string>",
"whatsapp_user_id": "<string>",
"avatar_url": "<string>",
"reason": "<string>",
"event": "<string>",
"step_index": 0
}
]
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The unique identifier of the sequence
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Response
Default Response
Everyone this sequence is for: enrolled minus the people the judge turned down. Not scoped to a status — someone who replied, finished or opted out was still part of the audience. Always equals will_send + might_send.
-9007199254740991 <= x <= 9007199254740991The JUDGED half of people, not "everyone here passed": those who cleared the arming floor, plus anyone a later run scored below it after we had already armed or messaged them — a verdict cannot un-send a message. Before launch the two readings coincide, which is the only place this is shown as "will send to"; afterwards read in_flight for what can still happen.
-9007199254740991 <= x <= 9007199254740991Never judged. These arm too — an unjudged list is user authority. For a sequence that has not launched, the audience it would send to is will_send + might_send; once it has, some of those people are already done and in_flight is the forward-looking number.
-9007199254740991 <= x <= 9007199254740991Judged and turned down BEFORE anything was sent — the exact complement of people, so the two are enrolled. Someone already armed when a later run failed them is not here; they stay in the audience.
-9007199254740991 <= x <= 9007199254740991The whole list, judged-down included — people + rejected.
-9007199254740991 <= x <= 9007199254740991Whether there is anything for the judge to work against. Decides whether the audience has a split worth showing at all.
-9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991Concluded without ever being reached — journey over, nothing sent. Terminal only: parked people and deferrals are excluded, since neither is a conclusion. people = sent + wont_reach + (in flight and never contacted) — someone mid-sequence has been contacted AND is still in flight, so the plain three-term form double counts them.
-9007199254740991 <= x <= 9007199254740991Parked: waiting on a human to fix something, after which the journey resumes where it stopped. Kept apart from wont_reach because it is a call to action, not attrition. A SLICE of the still-in-flight people, not a fourth bucket beside them — someone parked after step 0 is counted here and in sent, so do not add this to the others.
-9007199254740991 <= x <= 9007199254740991Nothing left in flight and something already went out. Derived, never stored — the status stays active, so enrolling more people revives the sequence on its own.
An enrich or judge run is in flight for this sequence.
Who we will never reach, newest first. Capped — the count is on wont_reach.
Show child attributes
Show child attributes
Who is waiting on a human, newest first. Capped — the count is on needs_you.
Show child attributes
Show child attributes
Was this page helpful?