Guides › Track send status

Guide

Track send status

Send creation is asynchronous. A 202 Accepted response tells you the request was accepted and returns a send_id for later status lookup.

Follow a send

Call GET /v1/sends/{send_id} with the send_id returned from your send-creating request.

curl "https://api.ctct.dev/v1/sends/<SEND_ID>" \
  -H "Authorization: Bearer <API_KEY>"

The send detail includes status, target audience, creation time, a logs link, and recent audit logs when available.

{
  "send_id": "<SEND_ID>",
  "message_id": "<MESSAGE_ID>",
  "audience": {
    "target_surface_kind": "email",
    "target_surface_ref": "ada@example.com"
  },
  "status": "accepted",
  "created_at": "2026-05-18T12:00:00Z",
  "logs_path": "/v1/logs?send_id=<SEND_ID>"
}

List sends

Use GET /v1/sends to browse recent transactional sends. Supported filters include status, recipient, tag key/value, creation range, page token, and limit.

curl "https://api.ctct.dev/v1/sends?status=accepted&recipient=ada@example.com&limit=25" \
  -H "Authorization: Bearer <API_KEY>"

Cancel a send

If a send is still cancelable, call POST /v1/sends/{send_id}:cancel. Terminal sends return a conflict such as send_not_cancelable.

curl -X POST "https://api.ctct.dev/v1/sends/<SEND_ID>:cancel" \
  -H "Authorization: Bearer <API_KEY>"
Need push updates? Use webhooks to receive lifecycle events instead of polling every send aggressively.