RaabtaHQ
Cancel a scheduled broadcast

Cancel a scheduled broadcast

POST/api/v1/broadcasts/{id}/cancel

scope broadcasts:send

Returns a scheduled campaign to draft before it starts. A campaign that is already sending or finished returns 409 conflict.

Path parameters

NameTypeDescription
idrequired
string (uuid)Broadcast id
Request
curl -X POST "https://your-crm.example.com/api/v1/broadcasts/a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d/cancel" \
  -H "Authorization: Bearer $RAABTA_API_KEY"
Response · 200 OK
{
  "data": {
    "id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d",
    "name": "September reminders",
    "kind": "template",
    "channel": "whatsapp",
    "template": {
      "name": "appointment_reminder",
      "language": "en_US"
    },
    "status": "draft",
    "scheduled_at": null,
    "counts": {
      "total": 240,
      "sent": 120,
      "delivered": 96,
      "read": 40,
      "replied": 3,
      "failed": 2
    },
    "created_at": "2026-09-02T10:00:00.000Z",
    "updated_at": "2026-09-02T10:02:00.000Z"
  }
}

Response

Wrapped in { data: … }
NameTypeDescription
idrequired
string (uuid)UUID
namerequired
stringCampaign name, as shown in the dashboard
kindrequired
string (enum)template = an approved WhatsApp template; free_text = a personal-WhatsApp messagetemplatefree_text
channelrequired
stringwhatsapp | personal_whatsapp
templaterequired
object | nullThe template a template broadcast sends
template.namerequired
string
template.languagerequired
string
statusrequired
string (enum)draft → scheduled → sending → sent | faileddraftscheduledsendingsentfailed
scheduled_atrequired
string (date-time) | nullWhen it was (or will be) started
countsrequired
objectLive delivery counters — poll this endpoint for progress
counts.totalrequired
integerRecipients materialised
counts.sentrequired
integerHanded to the channel
counts.deliveredrequired
integerConfirmed delivered to the handset
counts.readrequired
integerConfirmed read
counts.repliedrequired
integerRecipients who replied
counts.failedrequired
integerRejected by the channel
created_atrequired
string (date-time)ISO 8601 timestamp
updated_atrequired
string (date-time)ISO 8601 timestamp

Errors

StatusCodeWhen
400validation_errorThe body or query failed validation. `details` lists each failing field with a `path` and a `message`.
401unauthorizedNo usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable.
403forbiddenThe key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which.
403account_suspendedThe account this key belongs to is suspended. Rotating the key will not help; contact support.
404not_foundNo such resource in this account. A resource that exists in another account also returns this.
409conflictThe request conflicts with current state: a duplicate phone number on create, an invalid state transition, or an idempotent request that is still in flight.
429rate_limitedThe per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying.
500internalSomething failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists.