curl --request POST \
--url https://api.example.com/api/public/tools/list_enrollments \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"ids": null,
"ignoreIds": null,
"userIds": null,
"teamIds": null,
"flowPlanId": null,
"flowPlanIds": null,
"statuses": null,
"rerunChildStatuses": null,
"signalTypes": null,
"replyTypes": null,
"searchQuery": null,
"limit": 10,
"cursor": null,
"from": null,
"to": null,
"finishedFrom": null,
"finishedTo": null,
"scores": null,
"audienceIds": null,
"sourceFlowIds": null,
"firstName": null,
"lastName": null,
"email": null,
"isRerun": null,
"hasRerun": null,
"hasFailedAction": null,
"isShowHidden": true,
"linkedinUrl": null,
"sources": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_enrollments"
payload = {
"ids": None,
"ignoreIds": None,
"userIds": None,
"teamIds": None,
"flowPlanId": None,
"flowPlanIds": None,
"statuses": None,
"rerunChildStatuses": None,
"signalTypes": None,
"replyTypes": None,
"searchQuery": None,
"limit": 10,
"cursor": None,
"from": None,
"to": None,
"finishedFrom": None,
"finishedTo": None,
"scores": None,
"audienceIds": None,
"sourceFlowIds": None,
"firstName": None,
"lastName": None,
"email": None,
"isRerun": None,
"hasRerun": None,
"hasFailedAction": None,
"isShowHidden": True,
"linkedinUrl": None,
"sources": None
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ids: null,
ignoreIds: null,
userIds: null,
teamIds: null,
flowPlanId: null,
flowPlanIds: null,
statuses: null,
rerunChildStatuses: null,
signalTypes: null,
replyTypes: null,
searchQuery: null,
limit: 10,
cursor: null,
from: null,
to: null,
finishedFrom: null,
finishedTo: null,
scores: null,
audienceIds: null,
sourceFlowIds: null,
firstName: null,
lastName: null,
email: null,
isRerun: null,
hasRerun: null,
hasFailedAction: null,
isShowHidden: true,
linkedinUrl: null,
sources: null
})
};
fetch('https://api.example.com/api/public/tools/list_enrollments', 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.example.com/api/public/tools/list_enrollments",
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([
'ids' => null,
'ignoreIds' => null,
'userIds' => null,
'teamIds' => null,
'flowPlanId' => null,
'flowPlanIds' => null,
'statuses' => null,
'rerunChildStatuses' => null,
'signalTypes' => null,
'replyTypes' => null,
'searchQuery' => null,
'limit' => 10,
'cursor' => null,
'from' => null,
'to' => null,
'finishedFrom' => null,
'finishedTo' => null,
'scores' => null,
'audienceIds' => null,
'sourceFlowIds' => null,
'firstName' => null,
'lastName' => null,
'email' => null,
'isRerun' => null,
'hasRerun' => null,
'hasFailedAction' => null,
'isShowHidden' => true,
'linkedinUrl' => null,
'sources' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.example.com/api/public/tools/list_enrollments"
payload := strings.NewReader("{\n \"ids\": null,\n \"ignoreIds\": null,\n \"userIds\": null,\n \"teamIds\": null,\n \"flowPlanId\": null,\n \"flowPlanIds\": null,\n \"statuses\": null,\n \"rerunChildStatuses\": null,\n \"signalTypes\": null,\n \"replyTypes\": null,\n \"searchQuery\": null,\n \"limit\": 10,\n \"cursor\": null,\n \"from\": null,\n \"to\": null,\n \"finishedFrom\": null,\n \"finishedTo\": null,\n \"scores\": null,\n \"audienceIds\": null,\n \"sourceFlowIds\": null,\n \"firstName\": null,\n \"lastName\": null,\n \"email\": null,\n \"isRerun\": null,\n \"hasRerun\": null,\n \"hasFailedAction\": null,\n \"isShowHidden\": true,\n \"linkedinUrl\": null,\n \"sources\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.example.com/api/public/tools/list_enrollments")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ids\": null,\n \"ignoreIds\": null,\n \"userIds\": null,\n \"teamIds\": null,\n \"flowPlanId\": null,\n \"flowPlanIds\": null,\n \"statuses\": null,\n \"rerunChildStatuses\": null,\n \"signalTypes\": null,\n \"replyTypes\": null,\n \"searchQuery\": null,\n \"limit\": 10,\n \"cursor\": null,\n \"from\": null,\n \"to\": null,\n \"finishedFrom\": null,\n \"finishedTo\": null,\n \"scores\": null,\n \"audienceIds\": null,\n \"sourceFlowIds\": null,\n \"firstName\": null,\n \"lastName\": null,\n \"email\": null,\n \"isRerun\": null,\n \"hasRerun\": null,\n \"hasFailedAction\": null,\n \"isShowHidden\": true,\n \"linkedinUrl\": null,\n \"sources\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_enrollments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ids\": null,\n \"ignoreIds\": null,\n \"userIds\": null,\n \"teamIds\": null,\n \"flowPlanId\": null,\n \"flowPlanIds\": null,\n \"statuses\": null,\n \"rerunChildStatuses\": null,\n \"signalTypes\": null,\n \"replyTypes\": null,\n \"searchQuery\": null,\n \"limit\": 10,\n \"cursor\": null,\n \"from\": null,\n \"to\": null,\n \"finishedFrom\": null,\n \"finishedTo\": null,\n \"scores\": null,\n \"audienceIds\": null,\n \"sourceFlowIds\": null,\n \"firstName\": null,\n \"lastName\": null,\n \"email\": null,\n \"isRerun\": null,\n \"hasRerun\": null,\n \"hasFailedAction\": null,\n \"isShowHidden\": true,\n \"linkedinUrl\": null,\n \"sources\": null\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}List Enrollments
Call get_guide with topic=enrollment_management for enrollment, Awaiting, queue-item, identifier, and status guidance.
Detailed usage guidance
- Advanced search for lightweight real enrollment rows.
- Uses the enrollment read model and returns source=flow rows only; it does not return queue-only rows or UI page rows.
- Do not use this for active/current LinkedIn actions, LinkedIn action/request status, LinkedIn queue diagnostics, or why a LinkedIn action has not sent; use list_linkedin_outreach_queue instead.
- If the customer asks for enrollments/activities and specifically mentions LinkedIn actions, check list_linkedin_outreach_queue as well because enrollment rows do not expose provider request status, awaiting requirements, or request gates.
- Use this, rather than list_flow_plan_enrollments, when filtering completed, failed, or canceled enrollments by when that terminal status happened—for example, ‘canceled enrollments for this flow in the last 12 hours’.
- Pass flowPlanId, statuses, and finishedFrom/finishedTo; from/to filter enrollment creation time only.
- For a simple one-flow status page without a terminal-date range, use list_flow_plan_enrollments.
- Rows include replySummary with counts and latest timestamp, but not reply bodies; use enrollmentId with get_flow_enrollment only when canInspectEnrollment is true to read individual replies.
- Omits root, tasks, and action payloads.
curl --request POST \
--url https://api.example.com/api/public/tools/list_enrollments \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"ids": null,
"ignoreIds": null,
"userIds": null,
"teamIds": null,
"flowPlanId": null,
"flowPlanIds": null,
"statuses": null,
"rerunChildStatuses": null,
"signalTypes": null,
"replyTypes": null,
"searchQuery": null,
"limit": 10,
"cursor": null,
"from": null,
"to": null,
"finishedFrom": null,
"finishedTo": null,
"scores": null,
"audienceIds": null,
"sourceFlowIds": null,
"firstName": null,
"lastName": null,
"email": null,
"isRerun": null,
"hasRerun": null,
"hasFailedAction": null,
"isShowHidden": true,
"linkedinUrl": null,
"sources": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_enrollments"
payload = {
"ids": None,
"ignoreIds": None,
"userIds": None,
"teamIds": None,
"flowPlanId": None,
"flowPlanIds": None,
"statuses": None,
"rerunChildStatuses": None,
"signalTypes": None,
"replyTypes": None,
"searchQuery": None,
"limit": 10,
"cursor": None,
"from": None,
"to": None,
"finishedFrom": None,
"finishedTo": None,
"scores": None,
"audienceIds": None,
"sourceFlowIds": None,
"firstName": None,
"lastName": None,
"email": None,
"isRerun": None,
"hasRerun": None,
"hasFailedAction": None,
"isShowHidden": True,
"linkedinUrl": None,
"sources": None
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ids: null,
ignoreIds: null,
userIds: null,
teamIds: null,
flowPlanId: null,
flowPlanIds: null,
statuses: null,
rerunChildStatuses: null,
signalTypes: null,
replyTypes: null,
searchQuery: null,
limit: 10,
cursor: null,
from: null,
to: null,
finishedFrom: null,
finishedTo: null,
scores: null,
audienceIds: null,
sourceFlowIds: null,
firstName: null,
lastName: null,
email: null,
isRerun: null,
hasRerun: null,
hasFailedAction: null,
isShowHidden: true,
linkedinUrl: null,
sources: null
})
};
fetch('https://api.example.com/api/public/tools/list_enrollments', 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.example.com/api/public/tools/list_enrollments",
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([
'ids' => null,
'ignoreIds' => null,
'userIds' => null,
'teamIds' => null,
'flowPlanId' => null,
'flowPlanIds' => null,
'statuses' => null,
'rerunChildStatuses' => null,
'signalTypes' => null,
'replyTypes' => null,
'searchQuery' => null,
'limit' => 10,
'cursor' => null,
'from' => null,
'to' => null,
'finishedFrom' => null,
'finishedTo' => null,
'scores' => null,
'audienceIds' => null,
'sourceFlowIds' => null,
'firstName' => null,
'lastName' => null,
'email' => null,
'isRerun' => null,
'hasRerun' => null,
'hasFailedAction' => null,
'isShowHidden' => true,
'linkedinUrl' => null,
'sources' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.example.com/api/public/tools/list_enrollments"
payload := strings.NewReader("{\n \"ids\": null,\n \"ignoreIds\": null,\n \"userIds\": null,\n \"teamIds\": null,\n \"flowPlanId\": null,\n \"flowPlanIds\": null,\n \"statuses\": null,\n \"rerunChildStatuses\": null,\n \"signalTypes\": null,\n \"replyTypes\": null,\n \"searchQuery\": null,\n \"limit\": 10,\n \"cursor\": null,\n \"from\": null,\n \"to\": null,\n \"finishedFrom\": null,\n \"finishedTo\": null,\n \"scores\": null,\n \"audienceIds\": null,\n \"sourceFlowIds\": null,\n \"firstName\": null,\n \"lastName\": null,\n \"email\": null,\n \"isRerun\": null,\n \"hasRerun\": null,\n \"hasFailedAction\": null,\n \"isShowHidden\": true,\n \"linkedinUrl\": null,\n \"sources\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.example.com/api/public/tools/list_enrollments")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ids\": null,\n \"ignoreIds\": null,\n \"userIds\": null,\n \"teamIds\": null,\n \"flowPlanId\": null,\n \"flowPlanIds\": null,\n \"statuses\": null,\n \"rerunChildStatuses\": null,\n \"signalTypes\": null,\n \"replyTypes\": null,\n \"searchQuery\": null,\n \"limit\": 10,\n \"cursor\": null,\n \"from\": null,\n \"to\": null,\n \"finishedFrom\": null,\n \"finishedTo\": null,\n \"scores\": null,\n \"audienceIds\": null,\n \"sourceFlowIds\": null,\n \"firstName\": null,\n \"lastName\": null,\n \"email\": null,\n \"isRerun\": null,\n \"hasRerun\": null,\n \"hasFailedAction\": null,\n \"isShowHidden\": true,\n \"linkedinUrl\": null,\n \"sources\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_enrollments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ids\": null,\n \"ignoreIds\": null,\n \"userIds\": null,\n \"teamIds\": null,\n \"flowPlanId\": null,\n \"flowPlanIds\": null,\n \"statuses\": null,\n \"rerunChildStatuses\": null,\n \"signalTypes\": null,\n \"replyTypes\": null,\n \"searchQuery\": null,\n \"limit\": 10,\n \"cursor\": null,\n \"from\": null,\n \"to\": null,\n \"finishedFrom\": null,\n \"finishedTo\": null,\n \"scores\": null,\n \"audienceIds\": null,\n \"sourceFlowIds\": null,\n \"firstName\": null,\n \"lastName\": null,\n \"email\": null,\n \"isRerun\": null,\n \"hasRerun\": null,\n \"hasFailedAction\": null,\n \"isShowHidden\": true,\n \"linkedinUrl\": null,\n \"sources\": null\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Authorizations
Body
Specific enrollment ids to include. Use exact enrollmentId values returned by find_mcp_enrollment, add_dynamic_action, list_enrollments, or list_flow_plan_enrollments; do not pass queueItemId here.
Specific enrollment ids to exclude. Use exact enrollmentId values returned by find_mcp_enrollment, add_dynamic_action, list_enrollments, or list_flow_plan_enrollments; do not pass queueItemId here.
Assigned user ids to include. Use the exact current userId from get_current_user or userId values returned by list_team_members.
Team ids to include. Example item: team_123. Use the current teamId from get_current_user; non-admin callers are still scoped to their own team.
Advanced-search filter for one flow plan id.
- Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.
- Use this with statuses and finishedFrom/finishedTo for completed, failed, or canceled enrollments during a time period.
- For a simple single-flow status list without a terminal-date range, use list_flow_plan_enrollments instead.
Advanced-search filter for flow plan ids.
- Use exact flowPlanId values returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.
- For one flow plan plus a terminal-status time range, use this tool with statuses and finishedFrom/finishedTo; otherwise use list_flow_plan_enrollments for a simple one-flow status page.
Advanced-search status buckets to include: in_progress, completed, failed, or canceled.
- For completed, failed, or canceled enrollments during a period, combine this with flowPlanId and finishedFrom/finishedTo; do not use from/to because they filter creation time.
- Use list_flow_plan_enrollments for a simple one-flow status page or disqualified queue rows.
in_progress, failed, completed, canceled, disqualified Child rerun statuses to include.
pending, in_progress, completed, failed, canceled Signal types to include.
unknown, website_traffic, linkedin_engagement, leadership_changes, champion_tracking, job_postings, tech_stack, linkedin_listening, funding, product_usage, empty, company_website_traffic, prospect_website_traffic, general, hiring, null Reply/event filters to include.
email_reply, meeting_booked, linkedin_reply, no_reply Search text matched against prospect and company fields.
Max enrollment rows to return. Prefer the default 10; set 25 only when the customer asks for a larger page.
Cursor returned by a previous list_enrollments call.
Enrollment creation timestamp lower bound in UTC. Do not use this for when an enrollment completed, failed, or was canceled; use finishedFrom instead.
Enrollment creation timestamp upper bound in UTC, exclusive. Do not use this for when an enrollment completed, failed, or was canceled; use finishedTo instead.
Terminal-status timestamp lower bound in UTC, inclusive.
- Use this for completed, failed, or canceled enrollments 'in the last N hours' or during a date range; it uses the time the enrollment entered its displayed terminal status.
- Combine with statuses to choose an outcome.
Terminal-status timestamp upper bound in UTC, exclusive.
- Use this with finishedFrom for completed, failed, or canceled enrollments during a date range; it uses the time the enrollment entered its displayed terminal status.
- Combine with statuses to choose an outcome.
Lead-score buckets to include.
perfect_fit, good_fit, partial_fit, weak_fit Audience ids to include. Use exact id values returned by list_audiences or create_audience.
Source enrollment ids to include. Use exact sourceEnrollmentId/enrollmentId values returned by list_enrollments or get_flow_enrollment; do not pass queueItemId here.
Prospect first-name filter.
Prospect last-name filter.
Prospect email filter.
When true, only rerun enrollments are included. When false, only original enrollments are included.
When set, filters enrollments that have or do not have reruns.
When set, filters enrollments that have or do not have failed actions.
When true, includes hidden enrollment rows. Defaults to true to match the UI cursor-fast enrollment list.
Prospect LinkedIn URL filter.
Enrollment source filters, such as hubspot_custom_actions.
hubspot_custom_actions Response
Tool result.

