Copy a template into a draft broadcast
Replace a draft broadcast's subject, preview text and body with its own copy of a template, as "Choose another template" does on the dashboard.
https://app.usenotix.dev/api/v1/broadcasts/{broadcastId}/templateNeeds a full access key. Sending access keys cannot call this. Key permissions lists the extra rules some calls have.
Replace a draft broadcast's subject, preview text and body with its own copy of a template, as "Choose another template" does on the dashboard. The sender and audience stay.
Drafts only
Only a DRAFT broadcast changes through the API; any other answers 409 CONFLICT. The change is saved only over the draft as you read it: if it was edited again or scheduled while your change was being saved, the answer is 409 CONFLICT and nothing is written. Read it again and retry.
Nothing here sends. Scheduling runs every send check again, and the key's approval policy applies: an approval covers the content it was given for, so a draft changed after approval needs a new one.
Who can call it
A full access key, whoever on the team made it (as for creating a broadcast; on the dashboard any member edits broadcasts), or a live AI key. Every refusal is 403:
| Code | Why |
|---|---|
SCOPE_DENIED | A send-only or read-only key. |
FORBIDDEN | A live AI key changing a broadcast it did not create itself, or setting cc, bcc, or a reply-to off its domain; or a sender on a domain the key may not send from. |
A key limited to one domain sees only broadcasts that send from its domain (any other answers 404), and keeps the sender on that domain. The team can make 60 of these changes a minute; when Notix cannot count them the answer is 503 SERVICE_UNAVAILABLE (try again shortly), never a 429.
Path parameters
Body parameters
The template whose subject, preview text and body replace the draft's.
Headers
Bearer followed by your API key.
Errors
The template's stored body is not valid.
`SCOPE_DENIED`: a send-only or read-only key. `FORBIDDEN`: a live AI key changing a campaign it did not create, or a sender the key may not send from.
No campaign (or template) with this id for the calling team (or, for a key limited to one domain, on its domain).
The campaign is not a draft, or it changed (was edited or scheduled) while this edit was being saved.
The team made or changed 60 campaigns from templates in the last minute.
The call could not be counted just now. Try again shortly.
Every error has the same shape. See all error codes.
curl -X POST "https://app.usenotix.dev/api/v1/broadcasts/<broadcastId>/template" \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "cm1x8f3k20001qz7v5b9d2e4a"
}'
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.broadcasts.applyTemplate("cmp_123", "tpl_456");
{
"id": "cm1x8f3k20001qz7v5b9d2e4a",
"name": "Acme",
"from": "Acme <receipts@acme.com>",
"subject": "Your receipt for order 4471",
"previewText": "Thanks for your order.",
"contactBookId": "cm1x8f3k20001qz7v5b9d2e4a",
"segmentId": "cm1x8f3k20001qz7v5b9d2e4a",
"html": "<p>Thanks for your order.</p>",
"content": "string",
"status": "string",
"scheduledAt": "2026-10-01T09:00:00Z",
"batchSize": 1,
"batchWindowMinutes": 1,
"total": 1,
"maxRecipients": 1,
"sent": 1,
"delivered": 1,
"opened": 1,
"clicked": 1,
"unsubscribed": 1,
"bounced": 1,
"hardBounced": 1,
"complained": 1,
"replyTo": [
"string"
],
"cc": [
"string"
],
"bcc": [
"string"
],
"createdAt": "2026-10-01T09:00:00Z",
"updatedAt": "2026-10-01T09:00:00Z"
}