Skip to main content

Stop a call

See what's live, then end one call or all of them. Stopping is best-effort: the request goes to the voice provider and the call's final status arrives through the normal pipeline a moment later — poll GET /calls/{call_id} to confirm it wound down.

List active calls (queued or in progress) — same rows and envelope as GET /calls:

curl https://api.adamcalling.com/v1/calls/active -H "Authorization: $ADAM_API_KEY"

Stop one call:

curl -X POST https://api.adamcalling.com/v1/calls/$CALL_ID/stop \
-H "Authorization: $ADAM_API_KEY"
{"status": "success", "message": "Call ended successfully."}

Stopping a call that already ended succeeds too (the stop is idempotent). A call that isn't active — already completed or failed, or still mid-placement with no line yet — returns 400.

Stop every active call on your organization at once:

curl -X POST https://api.adamcalling.com/v1/calls/active/stop \
-H "Authorization: $ADAM_API_KEY"
{"status": "success", "message": "Stopping active calls. This may take some time...", "num_calls": 3}

num_calls is how many active calls a hangup was issued for. Stopping needs the calls:write scope; listing active calls needs calls:read.

Watch a call's events

GET /calls/{call_id}/events returns the call's append-only event trace — a chronological log of what happened during the call (status callbacks, the websocket connecting, per-node progress, a stop request, errors), oldest first. Use it to monitor a live call or diagnose one after the fact.

curl https://api.adamcalling.com/v1/calls/$CALL_ID/events \
-H "Authorization: $ADAM_API_KEY"
{
"status": "success",
"count": 2,
"total_count": 2,
"events": [
{"type": "status_callback", "payload": {"call_status": "in-progress"}, "sequence": 0, "occurred_at": "2026-07-03T09:12:01Z"},
{"type": "ws_connected", "payload": {}, "sequence": 0, "occurred_at": "2026-07-03T09:12:03Z"}
]
}

Each event carries a type (Adam Calling's own event vocabulary), an arbitrary payload object, a sequence (tie-breaker for events recorded in the same instant), and occurred_at. Page with limit/offset like the other lists. Needs the calls:read scope.