curl --request POST \
--url https://api.stardex.ai/v1/campaigns/{id}/enrollments/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "running",
"batch_id": "eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34",
"sort_by": "next_step_at",
"sort_order": "asc"
}
'import requests
url = "https://api.stardex.ai/v1/campaigns/{id}/enrollments/search"
payload = {
"status": "running",
"batch_id": "eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34",
"sort_by": "next_step_at",
"sort_order": "asc"
}
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({
status: 'running',
batch_id: 'eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34',
sort_by: 'next_step_at',
sort_order: 'asc'
})
};
fetch('https://api.stardex.ai/v1/campaigns/{id}/enrollments/search', 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.stardex.ai/v1/campaigns/{id}/enrollments/search",
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([
'status' => 'running',
'batch_id' => 'eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34',
'sort_by' => 'next_step_at',
'sort_order' => 'asc'
]),
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.stardex.ai/v1/campaigns/{id}/enrollments/search"
payload := strings.NewReader("{\n \"status\": \"running\",\n \"batch_id\": \"eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34\",\n \"sort_by\": \"next_step_at\",\n \"sort_order\": \"asc\"\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.stardex.ai/v1/campaigns/{id}/enrollments/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"running\",\n \"batch_id\": \"eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34\",\n \"sort_by\": \"next_step_at\",\n \"sort_order\": \"asc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/campaigns/{id}/enrollments/search")
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 \"status\": \"running\",\n \"batch_id\": \"eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34\",\n \"sort_by\": \"next_step_at\",\n \"sort_order\": \"asc\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"id": "e7b1d3f5-9a2c-4e6b-8d0f-3a5c7e9b1d42",
"person_id": "2f6b9d1e-4a8c-4e3f-b7d2-1c5a9e3b7f40",
"name": "Sam Patel",
"email": "sam@gmail.com",
"status": "active",
"status_group": "running",
"from_email": "riya@acmetalent.com",
"sender_team_member_id": "7c1e4a9b-3d6f-4b2e-8a5c-9f1d3b7e5a20",
"job_id": "b21d7e4a-5c9f-4e3b-a1d6-8f2c4e7b9a13",
"enrolled_at": "2026-10-13T11:31:05.000Z",
"current_step": 2,
"next_step_at": "2026-10-22T09:14:00.000Z",
"opens": 0,
"clicks": 1,
"reply_intent": null,
"batch_id": "eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34",
"source": "api"
}
],
"meta": {
"total": 1,
"offset": 0,
"limit": 100
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Search enrollees
People enrolled in the campaign with their status, current step, next step time, opens, clicks and reply intent. Filter by status group, person, job, enrollment batch, source, enrollment date, current step, reply intent, opens, clicks, or name and email; sort by enrollment date, name, status, next step time, opens or clicks. Needs campaigns:read.
curl --request POST \
--url https://api.stardex.ai/v1/campaigns/{id}/enrollments/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "running",
"batch_id": "eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34",
"sort_by": "next_step_at",
"sort_order": "asc"
}
'import requests
url = "https://api.stardex.ai/v1/campaigns/{id}/enrollments/search"
payload = {
"status": "running",
"batch_id": "eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34",
"sort_by": "next_step_at",
"sort_order": "asc"
}
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({
status: 'running',
batch_id: 'eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34',
sort_by: 'next_step_at',
sort_order: 'asc'
})
};
fetch('https://api.stardex.ai/v1/campaigns/{id}/enrollments/search', 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.stardex.ai/v1/campaigns/{id}/enrollments/search",
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([
'status' => 'running',
'batch_id' => 'eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34',
'sort_by' => 'next_step_at',
'sort_order' => 'asc'
]),
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.stardex.ai/v1/campaigns/{id}/enrollments/search"
payload := strings.NewReader("{\n \"status\": \"running\",\n \"batch_id\": \"eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34\",\n \"sort_by\": \"next_step_at\",\n \"sort_order\": \"asc\"\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.stardex.ai/v1/campaigns/{id}/enrollments/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"running\",\n \"batch_id\": \"eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34\",\n \"sort_by\": \"next_step_at\",\n \"sort_order\": \"asc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/campaigns/{id}/enrollments/search")
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 \"status\": \"running\",\n \"batch_id\": \"eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34\",\n \"sort_by\": \"next_step_at\",\n \"sort_order\": \"asc\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"id": "e7b1d3f5-9a2c-4e6b-8d0f-3a5c7e9b1d42",
"person_id": "2f6b9d1e-4a8c-4e3f-b7d2-1c5a9e3b7f40",
"name": "Sam Patel",
"email": "sam@gmail.com",
"status": "active",
"status_group": "running",
"from_email": "riya@acmetalent.com",
"sender_team_member_id": "7c1e4a9b-3d6f-4b2e-8a5c-9f1d3b7e5a20",
"job_id": "b21d7e4a-5c9f-4e3b-a1d6-8f2c4e7b9a13",
"enrolled_at": "2026-10-13T11:31:05.000Z",
"current_step": 2,
"next_step_at": "2026-10-22T09:14:00.000Z",
"opens": 0,
"clicks": 1,
"reply_intent": null,
"batch_id": "eb8d2f41-3c7a-4e19-b5d2-7f0a1c9e6b34",
"source": "api"
}
],
"meta": {
"total": 1,
"offset": 0,
"limit": 100
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Authorizations
Authenticate with a Bearer token: API key, OAuth token, or session token.
Path Parameters
Campaign ID.
Body
Records to skip for pagination. Defaults to 0.
x >= 0Max records per page (1–100). Defaults to 100.
1 <= x <= 100Only people in this status group. See GET /v1/campaigns/enrollment-statuses.
running, awaiting_task, replied, meeting_booked, bounced, completed, stopped Only enrollments of this person.
Only people enrolled with this job.
Only people enrolled by this enrollment batch.
Only people enrolled through an enrollment batch from this source: api (an API key), mcp (an AI assistant connected over MCP), copilot (Ask Dex) or app (a signed-in user calling the API). People enrolled in the Stardex app have no source and are left out.
api, mcp, copilot, app Only people enrolled at or after this time.
Only people enrolled at or before this time.
Only people currently on this step, counting from 1. Only running people have a current step.
1 <= x <= 20Only people whose reply was read as positive (interested), neutral or negative (not interested).
positive, neutral, negative Only people who opened the emails at least this many times.
0 <= x <= 32767Only people who opened the emails at most this many times. 0 finds people who never opened, including bounced people.
0 <= x <= 32767Only people who clicked links at least this many times.
0 <= x <= 32767Only people who clicked links at most this many times. 0 finds people who never clicked.
0 <= x <= 32767Only people whose name or email contains this text.
1 - 200Defaults to enrolled_at.
enrolled_at, name, status, next_step_at, opens, clicks Defaults to desc.
asc, desc Was this page helpful?