Update a broadcast
Changes a draft broadcast. Send only the fields you want to change; fields you leave out, or send as null, keep their value, except scheduledAt, where null or "" clears a scheduled start.
curl --request PUT \
--url https://api.vobiz.ai/api/v1/sms/broadcasts/{id} \
--header 'Content-Type: application/json' \
--header 'X-Auth-ID: <api-key>' \
--header 'X-Auth-Token: <api-key>' \
--data '
{
"template": "Hi {{name}}, your refund of {{amount}} has been issued."
}
'from vobiz import Vobiz
client = Vobiz(api_key="MA_XXXXXXXX", auth_token="YOUR_AUTH_TOKEN")
client.sms.broadcasts.update_broadcast(
id="3f8d2a6e-5b1c-4e7f-a9d0-2c4b6e8f1a35",
template="Hi {{name}}, your refund of {{amount}} has been issued.",
)
const options = {
method: 'PUT',
headers: {
'X-Auth-ID': '<api-key>',
'X-Auth-Token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({template: 'Hi {{name}}, your refund of {{amount}} has been issued.'})
};
fetch('https://api.vobiz.ai/api/v1/sms/broadcasts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "3f8d2a6e-5b1c-4e7f-a9d0-2c4b6e8f1a35",
"accountId": "MA_XXXXXXXX",
"name": "October pricing update",
"from": "+14155550100",
"channel": "sms",
"template": "Hi {{name}}, your refund of {{amount}} has been issued.",
"status": "draft",
"scheduledAt": null,
"ratePerSecond": 5,
"tag": "pricing-oct",
"dltEntityId": "",
"dltHeaderId": "",
"dltTemplateId": "",
"columns": [
"phone",
"name",
"amount"
],
"stats": {
"total": 3,
"pending": 3,
"sent": 0,
"delivered": 0,
"failed": 0,
"optedOut": 0,
"skipped": 0
},
"createdAt": "2026-10-12T10:30:00Z",
"updatedAt": "2026-10-12T10:42:00Z",
"startedAt": null,
"completedAt": null
}{
"error": "ratePerSecond must be between 1 and 50"
}{
"error": "missing or invalid credentials"
}{
"error": "broadcast not found"
}{
"error": "cannot edit a broadcast that is running"
}Authorizations
Your Vobiz account Auth ID (MA_XXXXXXXX).
Your Vobiz account Auth Token.
Path Parameters
The broadcast's id (UUID), as returned by POST /broadcasts or GET /broadcasts. An id that is not a UUID, or that belongs to another account, returns 404 with broadcast not found.
Body
Broadcast fields you can change on a draft. Every field is optional; fields you leave out keep their value, and the same validation as create applies.
A label for the broadcast in the console and in listings, 1 to 255 characters. Required on create; on update it cannot be set to an empty string.
255"October pricing update"
The sender every message goes out from: an SMS number on your account in E.164 format, a short code of up to 8 digits, or an alphanumeric sender ID of 1 to 11 letters, digits and spaces that starts with a letter or digit. Spaces, hyphens and brackets in phone numbers are removed before storing. Launch checks that a phone-number sender is an SMS number on your account. Required on create.
"+14155550100"
The channel the broadcast sends on. Broadcasts send SMS, so the only value is sms (matched case-insensitively), which is also the default.
sms Message body, up to 5,000 characters, with {{variable}} placeholders filled per recipient from the columns of your upload. Placeholder names are matched case-insensitively and trimmed, so {{ Name }} matches a name column. Launch requires a non-empty template.
5000"Hi {{name}}, your refund of {{amount}} is on its way."
RFC 3339 timestamp at which sending starts after you launch, for example 2026-11-01T09:00:00Z; offsets are converted to UTC. Omit it, or pass null or "", to send as soon as you launch. On update, null clears a previous value.
"2026-10-15T09:00:00Z"
Maximum messages sent per second while the broadcast runs, an integer from 1 to 50. Defaults to 5, and 0 also selects the default. Lower it to spread load on your own systems or replies.
1 <= x <= 505
Your own label of up to 255 characters, copied onto every message the broadcast sends so you can find them with the tag filter on GET /messages.
255"pricing-oct"
India (TRAI DLT). The Principal Entity ID you registered on a TRAI DLT portal, up to 64 characters. Pass it when the list contains Indian numbers; it is copied onto every message.
64India (TRAI DLT). The sender header ID you registered on a TRAI DLT portal, up to 64 characters. Copied onto every message.
64India (TRAI DLT). The content template ID you registered on a TRAI DLT portal, up to 64 characters. Your template text must match the registered template with the variables filled.
64Response
The updated broadcast.
A bulk SMS send that renders one template for every recipient of an uploaded list and sends at a controlled rate. Its status moves from draft through scheduled or running to completed, cancelled or failed, and stats counts recipients by state.
Unique identifier of the broadcast (UUID). Use it in every /broadcasts/{id} path.
"3f8d2a6e-5b1c-4e7f-a9d0-2c4b6e8f1a35"
Your Vobiz account ID (MA_...) that owns the broadcast.
"MA_XXXXXXXX"
The label you gave the broadcast, shown in the console and in listings.
"October pricing update"
The sender every message goes out from, as stored: an E.164 number, a short code or an alphanumeric sender ID.
"+14155550100"
The channel the broadcast sends on. Always sms.
sms "sms"
The message body with {{variable}} placeholders, filled per recipient from the columns of the upload. Empty until you set it.
"Hi {{name}}, your refund of {{amount}} is on its way."
Lifecycle state. draft until you launch, then scheduled (waiting for scheduledAt) or running. paused after a pause call or when pauseReason is set; completed once every recipient is processed; cancelled after a cancel call; failed when the run stopped on an error.
draft, scheduled, running, paused, completed, cancelled, failed "draft"
Present only while the broadcast is paused for a reason other than your own pause call. insufficient_balance means the balance ran out; top up and call POST /broadcasts/{id}/resume.
insufficient_balance When sending starts after launch, in UTC (ISO 8601). null means sending starts as soon as you launch.
null
Maximum messages sent per second while running, from 1 to 50.
5
Your label, copied onto every message the broadcast sends. Empty string when not set.
""
India (TRAI DLT). The Principal Entity ID copied onto every message. Empty string when not set.
""
India (TRAI DLT). The registered sender header ID copied onto every message. Empty string when not set.
""
India (TRAI DLT). The registered content template ID copied onto every message. Empty string when not set.
""
Column names from the latest recipient upload, as written in your file header. The first is the phone column and the rest are available as template variables. Empty until you upload recipients.
null
Recipient counts by state, recounted on every read.
Show child attributes
Show child attributes
When the broadcast was created (ISO 8601, UTC).
"2026-10-12T10:30:00Z"
When the broadcast last changed, including status changes (ISO 8601, UTC).
"2026-10-12T10:30:00Z"
When sending began (ISO 8601, UTC). null until the broadcast runs.
null
When the broadcast finished, either because the last recipient was processed or because it was cancelled (ISO 8601, UTC). null until then.
null
Was this page helpful?
curl --request PUT \
--url https://api.vobiz.ai/api/v1/sms/broadcasts/{id} \
--header 'Content-Type: application/json' \
--header 'X-Auth-ID: <api-key>' \
--header 'X-Auth-Token: <api-key>' \
--data '
{
"template": "Hi {{name}}, your refund of {{amount}} has been issued."
}
'from vobiz import Vobiz
client = Vobiz(api_key="MA_XXXXXXXX", auth_token="YOUR_AUTH_TOKEN")
client.sms.broadcasts.update_broadcast(
id="3f8d2a6e-5b1c-4e7f-a9d0-2c4b6e8f1a35",
template="Hi {{name}}, your refund of {{amount}} has been issued.",
)
const options = {
method: 'PUT',
headers: {
'X-Auth-ID': '<api-key>',
'X-Auth-Token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({template: 'Hi {{name}}, your refund of {{amount}} has been issued.'})
};
fetch('https://api.vobiz.ai/api/v1/sms/broadcasts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "3f8d2a6e-5b1c-4e7f-a9d0-2c4b6e8f1a35",
"accountId": "MA_XXXXXXXX",
"name": "October pricing update",
"from": "+14155550100",
"channel": "sms",
"template": "Hi {{name}}, your refund of {{amount}} has been issued.",
"status": "draft",
"scheduledAt": null,
"ratePerSecond": 5,
"tag": "pricing-oct",
"dltEntityId": "",
"dltHeaderId": "",
"dltTemplateId": "",
"columns": [
"phone",
"name",
"amount"
],
"stats": {
"total": 3,
"pending": 3,
"sent": 0,
"delivered": 0,
"failed": 0,
"optedOut": 0,
"skipped": 0
},
"createdAt": "2026-10-12T10:30:00Z",
"updatedAt": "2026-10-12T10:42:00Z",
"startedAt": null,
"completedAt": null
}{
"error": "ratePerSecond must be between 1 and 50"
}{
"error": "missing or invalid credentials"
}{
"error": "broadcast not found"
}{
"error": "cannot edit a broadcast that is running"
}