For the base URL, authentication and errors, see the REST API overview.
GET /v1/brands
- Request: GET /v1/brands
- Operation: ListBrands
- Operation ID:
Brand_List - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Example request
curl 'https://YOUR_SERVER/v1/brands' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200)
[
{
"brand": "iot.example.com",
"created": 1792263090749,
"description": "Console for Example customers",
"enabled": true,
"modified": 1792263090749,
"name": "Example IoT"
}
]POST /v1/brands
- Request: POST /v1/brands
- Operation: CreateBrand
- Operation ID:
Brand_Create - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
brand | string | yes | Pattern: ^([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+(?:\.[a-zA-Z]{2,11})?$ | The domain the brand applies to (e.g. iot.example.com): the console is branded for requests to that host. Point the domain to this server and register it in domains to get its certificate. |
config | object | no | Look and behaviour of the console when it is opened on the brand domain. With PUT it replaces the whole stored config (and images missing from it are deleted); PATCH merges it into the stored one. | |
config.accounts | object | no | Sign-up and login on this domain. Each key overrides the server setting of the same name (host settings, accounts.*). | |
config.accounts.allow_password | boolean | no | Password login (default true). | |
config.accounts.allow_passwordless | boolean | no | Passkey login. | |
config.accounts.cross_sign_in | boolean | no | false: only accounts created on this domain can sign in here (default true). | |
config.accounts.federated_login | boolean | no | Show the identity provider buttons. | |
config.accounts.identity_providers | array of any | no | Identity provider ids offered on this domain; empty offers every enabled one. | |
config.accounts.no_robot | object | no | reCAPTCHA on sign-up. The secret is only returned to admins. | |
config.accounts.no_robot.enabled | boolean | no | ||
config.accounts.no_robot.recaptcha | object | no | ||
config.accounts.no_robot.recaptcha.secret | string | no | ||
config.accounts.public_sign_up | boolean | no | Anyone can create an account. | |
config.accounts.public_sign_up_member_owner | string | no | Owner (admin or domain admin) of the project new members join. | |
config.accounts.public_sign_up_member_role | string | no | Role id given to the new members. | |
config.accounts.public_sign_up_project | object | no | ||
config.accounts.public_sign_up_project.limit_bucket_access | boolean | no | ||
config.accounts.public_sign_up_role | string | no | Role of the new accounts: user or member. | |
config.accounts.require_2fa | boolean | no | Require a second factor. | |
config.bright_logo | string or null | no | Menu logo. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.copyright | string | no | Footer text. | |
config.dark_logo | string or null | no | Platform logo: login and public pages, exports. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.description | string | no | Meta description (also og:description). | |
config.email | string | no | Support address shown in the menu (mailto). Not the sender of emails: see the brand email. | |
config.favicon | string or null | no | Browser icon. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.icon | string or null | no | Menu icon when the menu is folded. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.index_scripts | string | no | Raw HTML/JS injected in the page head (analytics…). Empty uses the default tag manager. | |
config.keywords | string | no | Meta keywords. | |
config.login | object | no | Login page. | |
config.login.background_color | string | no | CSS color. | |
config.login.background_image | string | no | Image URL. | |
config.login.background_style | string | no | Extra CSS as "property:value;property:value" (values cannot contain '😂. | |
config.login.box_class | string | no | Position of the login box: login-center, login-left or login-right. | |
config.login.box_style | string | no | Inline CSS of the login box. | |
config.name | string | no | Company name, used as title prefix and logo alt text. | |
config.product_types | array of object | no | Options of the product type selector. | |
config.product_types[].label | string | no | ||
config.product_types[].value | string | no | ||
config.pwa | object | no | Web app manifest (installable app). Served as is at /manifest.webmanifest. | |
config.pwa.background_color | string | no | ||
config.pwa.display | string | no | e.g. standalone. | |
config.pwa.icons | array of object | no | 192x192 and 512x512 icons, each for purpose any and maskable. | |
config.pwa.icons[].purpose | string | no | any or maskable. | |
config.pwa.icons[].sizes | string | no | e.g. 192x192. | |
config.pwa.icons[].src | string or null | no | data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.pwa.icons[].type | string | no | e.g. image/png. | |
config.pwa.name | string | no | ||
config.pwa.short_name | string | no | ||
config.pwa.start_url | string | no | ||
config.pwa.theme_color | string | no | CSS color, also the browser theme color. | |
config.share_image | string or null | no | Image for link previews (og:image). data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.show_community | boolean | no | Show the community links in the menu (default true). | |
config.show_version | boolean | no | Show the server version (default true). | |
config.style | object | no | ||
config.style.topBar | object | no | Console top bar. | |
config.style.topBar.background | string | no | CSS color. | |
config.style.topBar.color | string | no | CSS color of the text and icons. | |
config.title | string | no | Page title (also og:title). | |
config.url | string | no | Link of the logo on the login and public pages. | |
description | string | no | ||
enabled | boolean | no | ||
name | string | no |
Example request: Brand for a domain
curl -X POST 'https://YOUR_SERVER/v1/brands' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"brand": "iot.example.com",
"config": {
"accounts": {
"allow_password": true,
"public_sign_up": false
},
"copyright": "© Example Inc.",
"email": "support@example.com",
"login": {
"background_color": "#132533",
"box_class": "login-center"
},
"name": "Example",
"show_community": false,
"style": {
"topBar": {
"background": "#132533",
"color": "#ffffff"
}
},
"title": "Example IoT Console",
"url": "https://www.example.com"
},
"description": "Console for Example customers",
"enabled": true,
"name": "Example IoT"
}'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/brands/{brand}
- Request: GET /v1/brands/
- Operation: ReadBrandConfig
- Operation ID:
Brand_ReadConfig - Authentication: none, public operation
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/brands/YOUR_BRAND'Responses
| Status | Description |
|---|---|
| 200 | ok |
Response example (200, Brand for a domain)
{
"brand": "iot.example.com",
"config": {
"accounts": {
"allow_password": true,
"public_sign_up": false
},
"copyright": "© Example Inc.",
"email": "support@example.com",
"login": {
"background_color": "#132533",
"box_class": "login-center"
},
"name": "Example",
"show_community": false,
"style": {
"topBar": {
"background": "#132533",
"color": "#ffffff"
}
},
"title": "Example IoT Console",
"url": "https://www.example.com"
},
"created": 1792263090749,
"description": "Console for Example customers",
"enabled": true,
"modified": 1792263090749,
"name": "Example IoT"
}PUT /v1/brands/{brand}
- Request: PUT /v1/brands/
- Operation: UpdateBrand
- Operation ID:
Brand_Update - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
config | object | no | Look and behaviour of the console when it is opened on the brand domain. With PUT it replaces the whole stored config (and images missing from it are deleted); PATCH merges it into the stored one. | |
config.accounts | object | no | Sign-up and login on this domain. Each key overrides the server setting of the same name (host settings, accounts.*). | |
config.accounts.allow_password | boolean | no | Password login (default true). | |
config.accounts.allow_passwordless | boolean | no | Passkey login. | |
config.accounts.cross_sign_in | boolean | no | false: only accounts created on this domain can sign in here (default true). | |
config.accounts.federated_login | boolean | no | Show the identity provider buttons. | |
config.accounts.identity_providers | array of any | no | Identity provider ids offered on this domain; empty offers every enabled one. | |
config.accounts.no_robot | object | no | reCAPTCHA on sign-up. The secret is only returned to admins. | |
config.accounts.no_robot.enabled | boolean | no | ||
config.accounts.no_robot.recaptcha | object | no | ||
config.accounts.no_robot.recaptcha.secret | string | no | ||
config.accounts.public_sign_up | boolean | no | Anyone can create an account. | |
config.accounts.public_sign_up_member_owner | string | no | Owner (admin or domain admin) of the project new members join. | |
config.accounts.public_sign_up_member_role | string | no | Role id given to the new members. | |
config.accounts.public_sign_up_project | object | no | ||
config.accounts.public_sign_up_project.limit_bucket_access | boolean | no | ||
config.accounts.public_sign_up_role | string | no | Role of the new accounts: user or member. | |
config.accounts.require_2fa | boolean | no | Require a second factor. | |
config.bright_logo | string or null | no | Menu logo. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.copyright | string | no | Footer text. | |
config.dark_logo | string or null | no | Platform logo: login and public pages, exports. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.description | string | no | Meta description (also og:description). | |
config.email | string | no | Support address shown in the menu (mailto). Not the sender of emails: see the brand email. | |
config.favicon | string or null | no | Browser icon. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.icon | string or null | no | Menu icon when the menu is folded. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.index_scripts | string | no | Raw HTML/JS injected in the page head (analytics…). Empty uses the default tag manager. | |
config.keywords | string | no | Meta keywords. | |
config.login | object | no | Login page. | |
config.login.background_color | string | no | CSS color. | |
config.login.background_image | string | no | Image URL. | |
config.login.background_style | string | no | Extra CSS as "property:value;property:value" (values cannot contain '😂. | |
config.login.box_class | string | no | Position of the login box: login-center, login-left or login-right. | |
config.login.box_style | string | no | Inline CSS of the login box. | |
config.name | string | no | Company name, used as title prefix and logo alt text. | |
config.product_types | array of object | no | Options of the product type selector. | |
config.product_types[].label | string | no | ||
config.product_types[].value | string | no | ||
config.pwa | object | no | Web app manifest (installable app). Served as is at /manifest.webmanifest. | |
config.pwa.background_color | string | no | ||
config.pwa.display | string | no | e.g. standalone. | |
config.pwa.icons | array of object | no | 192x192 and 512x512 icons, each for purpose any and maskable. | |
config.pwa.icons[].purpose | string | no | any or maskable. | |
config.pwa.icons[].sizes | string | no | e.g. 192x192. | |
config.pwa.icons[].src | string or null | no | data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.pwa.icons[].type | string | no | e.g. image/png. | |
config.pwa.name | string | no | ||
config.pwa.short_name | string | no | ||
config.pwa.start_url | string | no | ||
config.pwa.theme_color | string | no | CSS color, also the browser theme color. | |
config.share_image | string or null | no | Image for link previews (og:image). data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.show_community | boolean | no | Show the community links in the menu (default true). | |
config.show_version | boolean | no | Show the server version (default true). | |
config.style | object | no | ||
config.style.topBar | object | no | Console top bar. | |
config.style.topBar.background | string | no | CSS color. | |
config.style.topBar.color | string | no | CSS color of the text and icons. | |
config.title | string | no | Page title (also og:title). | |
config.url | string | no | Link of the logo on the login and public pages. | |
description | string | no | ||
email | object | no | Emails sent to accounts of this domain (verification, password…). With PUT it replaces the whole stored email config; PATCH merges it. Read it with GET /v1/brands/{brand}/email and try a template with POST /v1/brands/{brand}/email/test. | |
email.custom | boolean | no | true: send with settings instead of the server mail settings. | |
email.settings | object | no | ||
email.settings.from | string | no | Sender address. | |
email.settings.from_name | string | no | Sender name. | |
email.settings.ses | object | no | ||
email.settings.ses.aws_access_key_id | string | no | ||
email.settings.ses.aws_region | string | no | e.g. eu-west-1. | |
email.settings.ses.aws_secret_access_key | string | no | ||
email.settings.smtp | object | no | ||
email.settings.smtp.host | string | no | ||
email.settings.smtp.password | string | no | ||
email.settings.smtp.port | string or integer | no | Pattern: ^[0-9]{1,5}$ | As a string, e.g. "587" (numbers are ignored by the server). |
email.settings.smtp.secure | boolean | no | true: implicit TLS (usually port 465); false: the server must offer STARTTLS (usually 587). | |
email.settings.smtp.username | string | no | ||
email.settings.type | string | no | smtp or ses. | |
email.templates | object | no | Per template: email_verification, forgot_password, create_password, device_disabled. Missing fields use the defaults. Subject and body may use {{code}} (the token for the link), {{user}}, {{email}}, {{host}}, {{admin}}, {{host_url}} and, in device_disabled, {{device}}. Links: {{host_url}}/verify_email?code={{code}}, {{host_url}}/password?code={{code}} (forgot_password), {{host_url}}/create_password?code={{code}}. {{name}}, {{url}}, {{logo}} and {{description}} only exist in the built-in defaults: in a custom template write the brand name and the logo URL (e.g. https://<brand>/brand/images/dark_logo.png) directly. The 'enabled' flag is not enforced yet. | |
email.templates.create_password | object | no | ||
email.templates.create_password.body | string | no | HTML. | |
email.templates.create_password.enabled | boolean or string | no | The built-in defaults carry it as a string. | |
email.templates.create_password.from | string | no | ||
email.templates.create_password.from_name | string | no | ||
email.templates.create_password.subject | string | no | ||
email.templates.device_disabled | object | no | ||
email.templates.device_disabled.body | string | no | HTML. | |
email.templates.device_disabled.enabled | boolean or string | no | The built-in defaults carry it as a string. | |
email.templates.device_disabled.from | string | no | ||
email.templates.device_disabled.from_name | string | no | ||
email.templates.device_disabled.subject | string | no | ||
email.templates.email_verification | object | no | ||
email.templates.email_verification.body | string | no | HTML. | |
email.templates.email_verification.enabled | boolean or string | no | The built-in defaults carry it as a string. | |
email.templates.email_verification.from | string | no | ||
email.templates.email_verification.from_name | string | no | ||
email.templates.email_verification.subject | string | no | ||
email.templates.forgot_password | object | no | ||
email.templates.forgot_password.body | string | no | HTML. | |
email.templates.forgot_password.enabled | boolean or string | no | The built-in defaults carry it as a string. | |
email.templates.forgot_password.from | string | no | ||
email.templates.forgot_password.from_name | string | no | ||
email.templates.forgot_password.subject | string | no | ||
enabled | boolean | no | ||
name | string | no |
Example request: Replace the whole config (logos missing from it are deleted)
curl -X PUT 'https://YOUR_SERVER/v1/brands/YOUR_BRAND' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"config": {
"bright_logo": "/brand/images/bright_logo.png",
"dark_logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
"name": "Example",
"style": {
"topBar": {
"background": "#132533",
"color": "#ffffff"
}
},
"title": "Example IoT Console"
}
}'Example body: Send emails with Amazon SES
{
"email": {
"custom": true,
"settings": {
"from": "noreply@example.com",
"from_name": "Example IoT",
"ses": {
"aws_access_key_id": "AKIA…",
"aws_region": "eu-west-1",
"aws_secret_access_key": "…"
},
"type": "ses"
}
}
}Example body: Send emails with SMTP
{
"email": {
"custom": true,
"settings": {
"from": "noreply@example.com",
"from_name": "Example IoT",
"smtp": {
"host": "smtp.example.com",
"password": "app-password",
"port": "587",
"secure": false,
"username": "noreply@example.com"
},
"type": "smtp"
}
}
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
PATCH /v1/brands/{brand}
- Request: PATCH /v1/brands/
- Operation: UpdateBrand
- Operation ID:
Brand_Patch - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand | path | string | yes |
Request body (application/json, required)
Partial update: only the fields sent change; config and email are merged into the stored ones (RFC 7386 merge patch: a null value removes a key). Images left out are kept.
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
config | object or null | no | Look and behaviour of the console when it is opened on the brand domain. With PUT it replaces the whole stored config (and images missing from it are deleted); PATCH merges it into the stored one. | |
config.accounts | object or null | no | Sign-up and login on this domain. Each key overrides the server setting of the same name (host settings, accounts.*). | |
config.accounts.allow_password | boolean or null | no | Password login (default true). | |
config.accounts.allow_passwordless | boolean or null | no | Passkey login. | |
config.accounts.cross_sign_in | boolean or null | no | false: only accounts created on this domain can sign in here (default true). | |
config.accounts.federated_login | boolean or null | no | Show the identity provider buttons. | |
config.accounts.identity_providers | array of any or null | no | Identity provider ids offered on this domain; empty offers every enabled one. | |
config.accounts.no_robot | object or null | no | reCAPTCHA on sign-up. The secret is only returned to admins. | |
config.accounts.no_robot.enabled | boolean or null | no | ||
config.accounts.no_robot.recaptcha | object or null | no | ||
config.accounts.no_robot.recaptcha.secret | string or null | no | ||
config.accounts.public_sign_up | boolean or null | no | Anyone can create an account. | |
config.accounts.public_sign_up_member_owner | string or null | no | Owner (admin or domain admin) of the project new members join. | |
config.accounts.public_sign_up_member_role | string or null | no | Role id given to the new members. | |
config.accounts.public_sign_up_project | object or null | no | ||
config.accounts.public_sign_up_project.limit_bucket_access | boolean or null | no | ||
config.accounts.public_sign_up_role | string or null | no | Role of the new accounts: user or member. | |
config.accounts.require_2fa | boolean or null | no | Require a second factor. | |
config.bright_logo | string or null | no | Menu logo. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.copyright | string or null | no | Footer text. | |
config.dark_logo | string or null | no | Platform logo: login and public pages, exports. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.description | string or null | no | Meta description (also og:description). | |
config.email | string or null | no | Support address shown in the menu (mailto). Not the sender of emails: see the brand email. | |
config.favicon | string or null | no | Browser icon. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.icon | string or null | no | Menu icon when the menu is folded. data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.index_scripts | string or null | no | Raw HTML/JS injected in the page head (analytics…). Empty uses the default tag manager. | |
config.keywords | string or null | no | Meta keywords. | |
config.login | object or null | no | Login page. | |
config.login.background_color | string or null | no | CSS color. | |
config.login.background_image | string or null | no | Image URL. | |
config.login.background_style | string or null | no | Extra CSS as "property:value;property:value" (values cannot contain '😂. | |
config.login.box_class | string or null | no | Position of the login box: login-center, login-left or login-right. | |
config.login.box_style | string or null | no | Inline CSS of the login box. | |
config.name | string or null | no | Company name, used as title prefix and logo alt text. | |
config.product_types | array of object or null or null | no | Options of the product type selector. | |
config.product_types[].label | string or null | no | ||
config.product_types[].value | string or null | no | ||
config.pwa | object or null | no | Web app manifest (installable app). Served as is at /manifest.webmanifest. | |
config.pwa.background_color | string or null | no | ||
config.pwa.display | string or null | no | e.g. standalone. | |
config.pwa.icons | array of object or null or null | no | 192x192 and 512x512 icons, each for purpose any and maskable. | |
config.pwa.icons[].purpose | string or null | no | any or maskable. | |
config.pwa.icons[].sizes | string or null | no | e.g. 192x192. | |
config.pwa.icons[].src | string or null | no | data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.pwa.icons[].type | string or null | no | e.g. image/png. | |
config.pwa.name | string or null | no | ||
config.pwa.short_name | string or null | no | ||
config.pwa.start_url | string or null | no | ||
config.pwa.theme_color | string or null | no | CSS color, also the browser theme color. | |
config.share_image | string or null | no | Image for link previews (og:image). data:image/png;base64,… or data:image/webp;base64,… to replace the image (stored under /brand/images/), the stored /brand/images/… URL to keep it, "" or null to remove it. | |
config.show_community | boolean or null | no | Show the community links in the menu (default true). | |
config.show_version | boolean or null | no | Show the server version (default true). | |
config.style | object or null | no | ||
config.style.topBar | object or null | no | Console top bar. | |
config.style.topBar.background | string or null | no | CSS color. | |
config.style.topBar.color | string or null | no | CSS color of the text and icons. | |
config.title | string or null | no | Page title (also og:title). | |
config.url | string or null | no | Link of the logo on the login and public pages. | |
description | string | no | ||
email | object or null | no | Emails sent to accounts of this domain (verification, password…). With PUT it replaces the whole stored email config; PATCH merges it. Read it with GET /v1/brands/{brand}/email and try a template with POST /v1/brands/{brand}/email/test. | |
email.custom | boolean or null | no | true: send with settings instead of the server mail settings. | |
email.settings | object or null | no | ||
email.settings.from | string or null | no | Sender address. | |
email.settings.from_name | string or null | no | Sender name. | |
email.settings.ses | object or null | no | ||
email.settings.ses.aws_access_key_id | string or null | no | ||
email.settings.ses.aws_region | string or null | no | e.g. eu-west-1. | |
email.settings.ses.aws_secret_access_key | string or null | no | ||
email.settings.smtp | object or null | no | ||
email.settings.smtp.host | string or null | no | ||
email.settings.smtp.password | string or null | no | ||
email.settings.smtp.port | string or integer or null | no | Pattern: ^[0-9]{1,5}$ | As a string, e.g. "587" (numbers are ignored by the server). |
email.settings.smtp.secure | boolean or null | no | true: implicit TLS (usually port 465); false: the server must offer STARTTLS (usually 587). | |
email.settings.smtp.username | string or null | no | ||
email.settings.type | string or null | no | smtp or ses. | |
email.templates | object or null | no | Per template: email_verification, forgot_password, create_password, device_disabled. Missing fields use the defaults. Subject and body may use {{code}} (the token for the link), {{user}}, {{email}}, {{host}}, {{admin}}, {{host_url}} and, in device_disabled, {{device}}. Links: {{host_url}}/verify_email?code={{code}}, {{host_url}}/password?code={{code}} (forgot_password), {{host_url}}/create_password?code={{code}}. {{name}}, {{url}}, {{logo}} and {{description}} only exist in the built-in defaults: in a custom template write the brand name and the logo URL (e.g. https://<brand>/brand/images/dark_logo.png) directly. The 'enabled' flag is not enforced yet. | |
email.templates.create_password | object or null | no | ||
email.templates.create_password.body | string or null | no | HTML. | |
email.templates.create_password.enabled | boolean or string or null | no | The built-in defaults carry it as a string. | |
email.templates.create_password.from | string or null | no | ||
email.templates.create_password.from_name | string or null | no | ||
email.templates.create_password.subject | string or null | no | ||
email.templates.device_disabled | object or null | no | ||
email.templates.device_disabled.body | string or null | no | HTML. | |
email.templates.device_disabled.enabled | boolean or string or null | no | The built-in defaults carry it as a string. | |
email.templates.device_disabled.from | string or null | no | ||
email.templates.device_disabled.from_name | string or null | no | ||
email.templates.device_disabled.subject | string or null | no | ||
email.templates.email_verification | object or null | no | ||
email.templates.email_verification.body | string or null | no | HTML. | |
email.templates.email_verification.enabled | boolean or string or null | no | The built-in defaults carry it as a string. | |
email.templates.email_verification.from | string or null | no | ||
email.templates.email_verification.from_name | string or null | no | ||
email.templates.email_verification.subject | string or null | no | ||
email.templates.forgot_password | object or null | no | ||
email.templates.forgot_password.body | string or null | no | HTML. | |
email.templates.forgot_password.enabled | boolean or string or null | no | The built-in defaults carry it as a string. | |
email.templates.forgot_password.from | string or null | no | ||
email.templates.forgot_password.from_name | string or null | no | ||
email.templates.forgot_password.subject | string or null | no | ||
enabled | boolean | no | ||
name | string | no |
Example request: Change the SMTP password
curl -X PATCH 'https://YOUR_SERVER/v1/brands/YOUR_BRAND' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"email": {
"settings": {
"smtp": {
"password": "new-app-password"
}
}
}
}'Example body: Change the title only
{
"config": {
"title": "New Console Title"
}
}Example body: Disable public sign-up
{
"config": {
"accounts": {
"public_sign_up": false
}
}
}Example body: Remove a logo
{
"config": {
"icon": null
}
}Example body: Replace a logo
{
"config": {
"dark_logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
}
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
DELETE /v1/brands/{brand}
- Request: DELETE /v1/brands/
- Operation: DeleteBrand
- Operation ID:
Brand_Delete - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand | path | string | yes |
Example request
curl -X DELETE 'https://YOUR_SERVER/v1/brands/YOUR_BRAND' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
POST /v1/brands/{brand}/email/test
- Request: POST /v1/brands/{brand}/email/test
- Operation: TestBrandEmail
- Operation ID:
Brand_TestEmail - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
template | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
Example request: Password reset email
curl -X POST 'https://YOUR_SERVER/v1/brands/YOUR_BRAND/email/test' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"template": "forgot_password"
}'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |