zoxaAI
Homepage
API ReferenceCampaigns

Campaign progress

GET /api/v1/campaign/{id}/progress — live progress, source sync, rate-limit, and lifecycle timestamps.

GET /api/v1/campaign/{campaign_id}/progress

Lightweight live status — designed for dashboarding. Per-contact results live on campaign-runs, and the per-outcome breakdown (busy / no-answer / etc.) on GET /calls?campaign_id={id} via connectionStatus; this endpoint reports the aggregates. For why a campaign moved to paused or failed, read the structured logs[] field on the campaign itself (see get-campaign).

Response

{
  "campaign_id":         7,
  "state":               "running",
  "total_rows":           500,
  "processed_rows":       120,
  "failed_calls":          25,
  "progress_percentage":   24.0,
  "source_sync": {
    "in_progress":  false,
    "last_synced":  "2026-06-16T10:00:00Z",
    "rows_synced":  500
  },
  "rate_limit":         5,
  "started_at":   "2026-06-16T10:05:00Z",
  "completed_at": null
}
FieldTypeNotes
campaign_idintEcho.
statestringcreated, syncing, running, paused, completed, failed.
total_rowsintTotal contacts queued for the campaign.
processed_rowsintCalls dispatched (regardless of outcome).
failed_callsintCalls that ended with a non-success outcome.
progress_percentagefloatprocessed_rows / total_rows * 100.
source_syncobjectStatus of the most recent CSV sync.
rate_limitintCurrent effective concurrency cap (org limit + max_concurrency).
started_at / completed_atISO 8601 | nullLifecycle timestamps.

Examples

curl https://dashboard.zoxa.ai/api/v1/campaign/7/progress \
  -H "X-API-Key: zsk_..."

Errors

StatusdetailWhen
404"Campaign not found"Id not in your org.

On this page