Track specific calls after a batch API call
After you submit a batch with POST /scheduler/call-jobs, you can check the status of specific calls — not just the whole batch — with POST /scheduler/call-jobs/query. Every row in your submission returns a snapshot_id; save those IDs, then query them whenever you need to follow up on a particular patient, provider, or handful of rows.
Before you start
You need an API key and a submitted batch. Trigger the batch with POST /scheduler/call-jobs and keep the call_job_id plus each row's snapshot_id from the response. The Call Jobs API reference covers the submission request and every field mentioned here.
Save the snapshot IDs at submission
Each item in the scheduled_requests[] array of the submission response includes a snapshot_id. That ID is the handle for one specific piece of work — one scheduled call from your batch.
{
"call_job_id": "f15e9b8c-1a2d-4f3e-9c4b-7e8f1a2b3c4d",
"submitted_at": "2026-08-03T15:30:00Z",
"scheduled_requests": [
{
"snapshot_id": "2c9f0d1e-3b4a-4c5d-9e6f-1a2b3c4d5e6f",
"scheduled_request_id": "8f2a1b3c-4d5e-4f6a-9b8c-7d6e5f4a3b2c",
"external_reference_id": "row-001",
"status": "ENQUEUED",
"error": null
}
]
}Validation-only submissions (validate_only_without_persistence=true) do not return snapshot_id because nothing is persisted.
Query the calls you want to track
Send POST /scheduler/call-jobs/query with at least one of call_job_id or snapshot_ids. When you supply both, results are limited to snapshots that belong to that call job and appear in your list.
snapshot_ids— the specific calls you want to track, in the order you provide them.call_job_id— every request in the batch.Both — the intersection of the two.
API_KEY="$API_KEY"
curl -X POST "https://stage-agent-api.evergrovelabs.com/scheduler/call-jobs/query" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"call_job_id": "f15e9b8c-1a2d-4f3e-9c4b-7e8f1a2b3c4d",
"snapshot_ids": [
"2c9f0d1e-3b4a-4c5d-9e6f-1a2b3c4d5e6f",
"7d8e9f0a-1b2c-4d3e-8f9a-0b1c2d3e4f5a"
]
}'Read the status of each call
The response returns scheduled_requests[] plus missing_snapshot_ids. Each request includes its snapshot_id, workflow_status, and a terminal flag that tells you whether that call has finished.
{
"scheduled_requests": [
{
"snapshot_id": "2c9f0d1e-3b4a-4c5d-9e6f-1a2b3c4d5e6f",
"terminal": true,
"external_reference_id": "row-001",
"workflow_status": "COMPLETE",
"generated_outcomes": {
"appointment_attendance_status": "attended"
}
},
{
"snapshot_id": "7d8e9f0a-1b2c-4d3e-8f9a-0b1c2d3e4f5a",
"terminal": false,
"external_reference_id": "row-002",
"workflow_status": "ENQUEUED",
"generated_outcomes": null
}
],
"missing_snapshot_ids": []
}terminal is true when the request's workflow_status is COMPLETE, DO_NOT_CALL_BACK, ERROR, or CANCELLED, or when its entity batch has finished with COMPLETE or COMPLETE_WITH_ERRORS. While a call is still being placed, the snapshot reflects live status; once its entity batch finishes, the snapshot freezes and stays stable.
Add "include_call_attempts": true to include each call's attempt history in the response. Without it, call_attempts is omitted. The Call Jobs API reference lists every response field and status value.
Check missing_snapshot_ids
IDs you asked for that returned nothing appear in missing_snapshot_ids. This happens when an ID does not exist, belongs to another tenant, or is not part of the call job you supplied. Correct or drop the ID and re-query; the snapshots that were found still come back normally. A call-job-only query always returns an empty missing_snapshot_ids.