Channel Settings API
Note
Requires Broadcast 2.46.0 or later.
The Channel Settings API reads and changes the settings of the token’s channel. They are the settings you set under Settings in Broadcast, grouped the same way:
general: Settings → General Channel Settingssender: Settings → Sender Detailsunsubscribe_page: Settings → Unsubscribe Page, including the legal linksconfirmation_page: the channel settings of the double opt-in Confirmation Pagesopt_in_forms: whether new opt-in forms start from the brand kit (the third switch on Settings → Brand Kit)
The API never reads or writes secrets, provider webhook keys, the channel domain, email servers, sender identities, users or billing. The brand kit has its own endpoint, /api/v1/channel/design (see the Brand Kit API), which needs the same Channel Settings write permission to change it. The confirmation page text belongs to a confirmation template, so it is in the Templates API.
Required Permissions
- Channel Settings read: get the settings
- Channel Settings write: change the settings
Both are off on every token until you tick them, including tokens created before 2.46.0. Set them under Access Tokens (and Admin API Tokens). See API Authentication.
An admin API token must name the channel with broadcast_channel_id, as a query parameter for GET and in the body for PATCH.
Channel Settings Object
{ "general": { "name": "Northwind News", "language": "de", "hard_bounces_block_transactional": false }, "sender": { "sender_name": "Northwind", "sender_email": "news@northwind.example", "physical_address": "Hauptstraße 1, 10115 Berlin", "email_footer": "<a href=\"{{ unsubscribe_url }}\">Von unseren E-Mails abmelden</a>", "use_email_footer": true }, "unsubscribe_page": { "require_confirmation": true, "topic_unsubscribe_scope": "topic", "match_browser_language": false, "languages": ["en"], "privacy_policy_url": "https://northwind.example/datenschutz", "legal_notice_url": "https://northwind.example/impressum", "redirect_url": null, "match_brand_kit": true, "appearance": { "colors": { "accent": "#16a34a" }, "unsubscribe_button": "red", "show_logo": true, "show_social_links": true }, "text": { "en": { "confirm": { "heading": "Leaving us?" } } } }, "confirmation_page": { "link_expiration_hours": 24, "match_brand_kit": true, "appearance": { "colors": {}, "show_logo": true, "show_social_links": true } }, "opt_in_forms": { "match_brand_kit": false } }
general
| Field | Type | Description |
|---|---|---|
name |
string | The channel name. Required, and unique on the server. |
language |
string | The channel language: en, de, fr, es, it, pt, nl, pl, sv, da, nb, fi or ja. Every public page uses it, and so does the default email footer. |
hard_bounces_block_transactional |
boolean | Whether a hard bounce also stops transactional emails to that address. |
sender
| Field | Type | Description |
|---|---|---|
sender_name |
string | The default sender name. |
sender_email |
string | The default sender address. Changing it updates the channel’s default sender identity, which you must verify again before it sends. |
physical_address |
string | The postal address for the email footer. |
email_footer |
string | The footer HTML added to emails. |
use_email_footer |
boolean | Whether the footer is added. |
unsubscribe_page
| Field | Type | Description |
|---|---|---|
require_confirmation |
boolean | Subscribers click a button to unsubscribe, which stops email security scanners unsubscribing people. |
topic_unsubscribe_scope |
string | On an email sent to a topic: topic (turn off only that topic) or everything. |
match_browser_language |
boolean | Show public pages in the browser’s language when it is one of the channel’s languages. |
languages |
array | The languages public pages offer besides general.language. Sending it replaces the list. |
privacy_policy_url |
string or null | Your privacy policy. An absolute http:// or https:// URL. Shown at the bottom of every unsubscribe page and every confirmation page. |
legal_notice_url |
string or null | Your legal notice (Impressum). The same rules as privacy_policy_url. |
redirect_url |
string or null | An https:// URL to send subscribers to after they unsubscribe. |
match_brand_kit |
boolean | Use the brand kit’s logo, colours, font, corner radius and social links. |
appearance.colors |
object | Hex colours (#rrggbb) for page_background, card_background, text, muted, link and accent. A colour that is not set follows the brand kit. |
appearance.unsubscribe_button |
string | red or accent. |
appearance.show_logo, appearance.show_social_links |
boolean | Whether the brand kit’s logo and social links show. |
text |
object | Your own page text: { "<language>": { "<page>": { "<field>": "..." } } }. The pages and fields are the ones under Settings → Unsubscribe Page (for example confirm with heading, message, confirm_button and stay_button). A field that is not set uses the built-in text. See Unsubscribe Settings. |
The URLs take no variables. A URL with {{ ... }} in it is refused.
confirmation_page
| Field | Type | Description |
|---|---|---|
link_expiration_hours |
integer | How long a confirmation link stays usable: 24, 48, 168 (7 days), 720 (30 days) or 0 (never). |
match_brand_kit |
boolean | Use the brand kit on the confirmation page. |
appearance.colors |
object | The same colours as the unsubscribe page. |
appearance.show_logo, appearance.show_social_links |
boolean | Whether the brand kit’s logo and social links show. |
The confirmation page shows the same privacy_policy_url and legal_notice_url as the unsubscribe pages.
opt_in_forms
| Field | Type | Description |
|---|---|---|
match_brand_kit |
boolean | New opt-in forms start from the brand kit’s accent, text colours, font and corner radius, and the form designer offers Apply brand kit. Existing forms do not change. |
The three match_brand_kit switches are the switches on Settings → Brand Kit. The Brand Kit API does not change them.
Get Channel Settings
GET /api/v1/channel/settings
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ https://your-broadcast-domain.com/api/v1/channel/settings
Returns 200 with the channel settings object. Settings you never changed show their defaults.
Update Channel Settings
PATCH /api/v1/channel/settings
Send the settings to change inside channel_settings. Only what you send changes:
- A setting you leave out stays as it is.
- In
textandappearance.colors, the values you send merge with the stored ones. Send""ornullto remove one, so it goes back to the built-in text or the brand kit. languagesreplaces the whole list.- Send
null(or"") forprivacy_policy_url,legal_notice_urlorredirect_urlto remove the link.
curl -X PATCH \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ --data-raw '{ "channel_settings": { "unsubscribe_page": { "privacy_policy_url": "https://northwind.example/datenschutz", "legal_notice_url": "https://northwind.example/impressum" } } }' \ https://your-broadcast-domain.com/api/v1/channel/settings
Returns 200 with the whole channel settings object after the change, so you can check what was saved.
Errors
A 422 saves nothing. There are two kinds.
A value that is not one of the allowed values: general.language, unsubscribe_page.topic_unsubscribe_scope, unsubscribe_page.appearance.unsubscribe_button, confirmation_page.link_expiration_hours, or a language in unsubscribe_page.languages. A switch (any boolean field) that is not true or false is refused the same way, with the message must be true or false. The strings "true", "false", "1" and "0" are also accepted:
{ "error": "Unprocessable Content", "message": "channel_settings.general.language must be one of en, de, fr, es, it, pt, nl, pl, sv, da, nb, fi, ja" }
A setting that fails validation, for example a blank general.name, a legal link that is not an http:// or https:// URL, a redirect_url that is not https://, or a colour that is not a hex colour:
{ "error": "Unsubscribe page settings legal notice link must be an http(s) URL" }
A body without a channel_settings object returns 400. A token without the permission returns 401.
Warnings
The response can carry a warnings array (see API Response Warnings):
unrecognized_parameter: a key that is not a setting, at any depth, for examplechannel_settings.general.domainorchannel_settings.unsubscribe_page.appearance.colors.glow. The key is ignored and the rest is saved.parameter_overridden: Broadcast changed a value you sent. This happens whenunsubscribe_page.languagesincludes the channel language (every page speaks it, so it is left out of the list), and when you changegeneral.languageand send the old language’s defaultsender.email_footer(the footer becomes the new language’s default).
{ "general": { "...": "..." }, "warnings": [ { "code": "unrecognized_parameter", "param": "channel_settings.general.domain", "message": "domain is not a recognized key in channel_settings.general and was ignored. Recognized keys: name, language, hard_bounces_block_transactional." } ] }