bird email broadcasts update <broadcast-id> [flags]
Update a draft or scheduled broadcast
Only the fields you pass change. A broadcast whose delivery has already started can no longer be edited.
To clear a nullable field (template, reply-to, ip-pool-id), pass an explicit null in the request body: no flag sends a null,
and --body-file takes a path or "-" for stdin, never inline JSON. The language sits inside the template object, so a null
that clears only the language is {"template": {"language": null}}.
Build the request from flags, a JSON EmailBroadcastUpdateRequest body via --body-file ("-" reads
stdin), or both — a flag overrides the matching body field. Run --example to
print a ready-to-edit body, or --dry-run to print the resolved request without
sending it.
# print the body shape (no credentials needed)
bird email broadcasts update --example
# the body it prints:
{
"category": "marketing",
"template": {
"language": "nl"
}
}
# clear the IP pool (a null only reaches the wire on stdin)
echo '{"ip_pool_id": null}' | bird email broadcasts update <broadcast-id> --body-file -
# clear only the language and keep the template
echo '{"template": {"language": null}}' | bird email broadcasts update <broadcast-id> --body-file -
| Name | Description |
|---|
--from | Sender address. Accepts a bare address or RFC 5322 "Name <addr>" form |
--audience-id | Audience to send to |
--template | Template ID (emt_…). The broadcast sends this template's published version |
--language | One of the template's languages, such as en or fr-CA. On its own it keeps the template and the version the broadcast is fixed to; a null in --body-file returns to the version's default language, unless the template has language_source_required set, in which case the broadcast cannot send until you select a language again |
--reply-to <value>… | Reply-To address; repeatable. Accepts bare addresses or RFC 5322 "Name <addr>" form |
| Name | Description |
|---|
--header <key=value> | Custom header as Key=Value; repeatable. Replaces the existing headers |
--tag <key=value> | Tag as name=value; repeatable. Replaces the existing tags |
--metadata | Arbitrary JSON metadata object. Replaces the existing metadata |
--category | Content classification: marketing or transactional |
--ip-pool-id | IP pool ID (ipp_…) to send from |
| Name | Description |
|---|
--track-opens | Track open events (default true) |
--track-clicks | Track click events (default true) |
| Name | Description |
|---|
--body-file | Read the JSON request body from this file; "-" reads stdin |
--example | Print a complete example request body, then exit |
--dry-run | Print the resolved request without sending it, then exit |
--idempotency-key | Deduplication key; a retry with the same key won't act twice |
| Name | Description |
|---|
--response-schema | Print the fields this command returns, then exit |