Skip to content

Reference

Brands

REST API reference for Brands: manage the brands of an instance and test their email settings. 7 operations.

Reference19 min read

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

bash
curl 'https://YOUR_SERVER/v1/brands' \
  -H 'Authorization: Bearer YOUR_TOKEN'

Responses

StatusDescription
200ok
401unauthorized
403forbidden

Response example (200)

json
[
  {
    "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)

FieldTypeRequiredConstraintsDescription
brandstringyesPattern: ^([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.
configobjectnoLook 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.accountsobjectnoSign-up and login on this domain. Each key overrides the server setting of the same name (host settings, accounts.*).
config.accounts.allow_passwordbooleannoPassword login (default true).
config.accounts.allow_passwordlessbooleannoPasskey login.
config.accounts.cross_sign_inbooleannofalse: only accounts created on this domain can sign in here (default true).
config.accounts.federated_loginbooleannoShow the identity provider buttons.
config.accounts.identity_providersarray of anynoIdentity provider ids offered on this domain; empty offers every enabled one.
config.accounts.no_robotobjectnoreCAPTCHA on sign-up. The secret is only returned to admins.
config.accounts.no_robot.enabledbooleanno
config.accounts.no_robot.recaptchaobjectno
config.accounts.no_robot.recaptcha.secretstringno
config.accounts.public_sign_upbooleannoAnyone can create an account.
config.accounts.public_sign_up_member_ownerstringnoOwner (admin or domain admin) of the project new members join.
config.accounts.public_sign_up_member_rolestringnoRole id given to the new members.
config.accounts.public_sign_up_projectobjectno
config.accounts.public_sign_up_project.limit_bucket_accessbooleanno
config.accounts.public_sign_up_rolestringnoRole of the new accounts: user or member.
config.accounts.require_2fabooleannoRequire a second factor.
config.bright_logostring or nullnoMenu 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.copyrightstringnoFooter text.
config.dark_logostring or nullnoPlatform 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.descriptionstringnoMeta description (also og:description).
config.emailstringnoSupport address shown in the menu (mailto). Not the sender of emails: see the brand email.
config.faviconstring or nullnoBrowser 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.iconstring or nullnoMenu 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_scriptsstringnoRaw HTML/JS injected in the page head (analytics…). Empty uses the default tag manager.
config.keywordsstringnoMeta keywords.
config.loginobjectnoLogin page.
config.login.background_colorstringnoCSS color.
config.login.background_imagestringnoImage URL.
config.login.background_stylestringnoExtra CSS as "property:value;property:value" (values cannot contain '😂.
config.login.box_classstringnoPosition of the login box: login-center, login-left or login-right.
config.login.box_stylestringnoInline CSS of the login box.
config.namestringnoCompany name, used as title prefix and logo alt text.
config.product_typesarray of objectnoOptions of the product type selector.
config.product_types[].labelstringno
config.product_types[].valuestringno
config.pwaobjectnoWeb app manifest (installable app). Served as is at /manifest.webmanifest.
config.pwa.background_colorstringno
config.pwa.displaystringnoe.g. standalone.
config.pwa.iconsarray of objectno192x192 and 512x512 icons, each for purpose any and maskable.
config.pwa.icons[].purposestringnoany or maskable.
config.pwa.icons[].sizesstringnoe.g. 192x192.
config.pwa.icons[].srcstring or nullnodata: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[].typestringnoe.g. image/png.
config.pwa.namestringno
config.pwa.short_namestringno
config.pwa.start_urlstringno
config.pwa.theme_colorstringnoCSS color, also the browser theme color.
config.share_imagestring or nullnoImage 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_communitybooleannoShow the community links in the menu (default true).
config.show_versionbooleannoShow the server version (default true).
config.styleobjectno
config.style.topBarobjectnoConsole top bar.
config.style.topBar.backgroundstringnoCSS color.
config.style.topBar.colorstringnoCSS color of the text and icons.
config.titlestringnoPage title (also og:title).
config.urlstringnoLink of the logo on the login and public pages.
descriptionstringno
enabledbooleanno
namestringno

Example request: Brand for a domain

bash
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

StatusDescription
200ok
401unauthorized
403forbidden

GET /v1/brands/{brand} ​

  • Request: GET /v1/brands/
  • Operation: ReadBrandConfig
  • Operation ID: Brand_ReadConfig
  • Authentication: none, public operation

Parameters

NameInTypeRequiredDescription
brandpathstringyes

Example request

bash
curl 'https://YOUR_SERVER/v1/brands/YOUR_BRAND'

Responses

StatusDescription
200ok

Response example (200, Brand for a domain)

json
{
  "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

NameInTypeRequiredDescription
brandpathstringyes

Request body (application/json, required)

FieldTypeRequiredConstraintsDescription
configobjectnoLook 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.accountsobjectnoSign-up and login on this domain. Each key overrides the server setting of the same name (host settings, accounts.*).
config.accounts.allow_passwordbooleannoPassword login (default true).
config.accounts.allow_passwordlessbooleannoPasskey login.
config.accounts.cross_sign_inbooleannofalse: only accounts created on this domain can sign in here (default true).
config.accounts.federated_loginbooleannoShow the identity provider buttons.
config.accounts.identity_providersarray of anynoIdentity provider ids offered on this domain; empty offers every enabled one.
config.accounts.no_robotobjectnoreCAPTCHA on sign-up. The secret is only returned to admins.
config.accounts.no_robot.enabledbooleanno
config.accounts.no_robot.recaptchaobjectno
config.accounts.no_robot.recaptcha.secretstringno
config.accounts.public_sign_upbooleannoAnyone can create an account.
config.accounts.public_sign_up_member_ownerstringnoOwner (admin or domain admin) of the project new members join.
config.accounts.public_sign_up_member_rolestringnoRole id given to the new members.
config.accounts.public_sign_up_projectobjectno
config.accounts.public_sign_up_project.limit_bucket_accessbooleanno
config.accounts.public_sign_up_rolestringnoRole of the new accounts: user or member.
config.accounts.require_2fabooleannoRequire a second factor.
config.bright_logostring or nullnoMenu 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.copyrightstringnoFooter text.
config.dark_logostring or nullnoPlatform 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.descriptionstringnoMeta description (also og:description).
config.emailstringnoSupport address shown in the menu (mailto). Not the sender of emails: see the brand email.
config.faviconstring or nullnoBrowser 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.iconstring or nullnoMenu 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_scriptsstringnoRaw HTML/JS injected in the page head (analytics…). Empty uses the default tag manager.
config.keywordsstringnoMeta keywords.
config.loginobjectnoLogin page.
config.login.background_colorstringnoCSS color.
config.login.background_imagestringnoImage URL.
config.login.background_stylestringnoExtra CSS as "property:value;property:value" (values cannot contain '😂.
config.login.box_classstringnoPosition of the login box: login-center, login-left or login-right.
config.login.box_stylestringnoInline CSS of the login box.
config.namestringnoCompany name, used as title prefix and logo alt text.
config.product_typesarray of objectnoOptions of the product type selector.
config.product_types[].labelstringno
config.product_types[].valuestringno
config.pwaobjectnoWeb app manifest (installable app). Served as is at /manifest.webmanifest.
config.pwa.background_colorstringno
config.pwa.displaystringnoe.g. standalone.
config.pwa.iconsarray of objectno192x192 and 512x512 icons, each for purpose any and maskable.
config.pwa.icons[].purposestringnoany or maskable.
config.pwa.icons[].sizesstringnoe.g. 192x192.
config.pwa.icons[].srcstring or nullnodata: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[].typestringnoe.g. image/png.
config.pwa.namestringno
config.pwa.short_namestringno
config.pwa.start_urlstringno
config.pwa.theme_colorstringnoCSS color, also the browser theme color.
config.share_imagestring or nullnoImage 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_communitybooleannoShow the community links in the menu (default true).
config.show_versionbooleannoShow the server version (default true).
config.styleobjectno
config.style.topBarobjectnoConsole top bar.
config.style.topBar.backgroundstringnoCSS color.
config.style.topBar.colorstringnoCSS color of the text and icons.
config.titlestringnoPage title (also og:title).
config.urlstringnoLink of the logo on the login and public pages.
descriptionstringno
emailobjectnoEmails 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.custombooleannotrue: send with settings instead of the server mail settings.
email.settingsobjectno
email.settings.fromstringnoSender address.
email.settings.from_namestringnoSender name.
email.settings.sesobjectno
email.settings.ses.aws_access_key_idstringno
email.settings.ses.aws_regionstringnoe.g. eu-west-1.
email.settings.ses.aws_secret_access_keystringno
email.settings.smtpobjectno
email.settings.smtp.hoststringno
email.settings.smtp.passwordstringno
email.settings.smtp.portstring or integernoPattern: ^[0-9]{1,5}$As a string, e.g. "587" (numbers are ignored by the server).
email.settings.smtp.securebooleannotrue: implicit TLS (usually port 465); false: the server must offer STARTTLS (usually 587).
email.settings.smtp.usernamestringno
email.settings.typestringnosmtp or ses.
email.templatesobjectnoPer 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_passwordobjectno
email.templates.create_password.bodystringnoHTML.
email.templates.create_password.enabledboolean or stringnoThe built-in defaults carry it as a string.
email.templates.create_password.fromstringno
email.templates.create_password.from_namestringno
email.templates.create_password.subjectstringno
email.templates.device_disabledobjectno
email.templates.device_disabled.bodystringnoHTML.
email.templates.device_disabled.enabledboolean or stringnoThe built-in defaults carry it as a string.
email.templates.device_disabled.fromstringno
email.templates.device_disabled.from_namestringno
email.templates.device_disabled.subjectstringno
email.templates.email_verificationobjectno
email.templates.email_verification.bodystringnoHTML.
email.templates.email_verification.enabledboolean or stringnoThe built-in defaults carry it as a string.
email.templates.email_verification.fromstringno
email.templates.email_verification.from_namestringno
email.templates.email_verification.subjectstringno
email.templates.forgot_passwordobjectno
email.templates.forgot_password.bodystringnoHTML.
email.templates.forgot_password.enabledboolean or stringnoThe built-in defaults carry it as a string.
email.templates.forgot_password.fromstringno
email.templates.forgot_password.from_namestringno
email.templates.forgot_password.subjectstringno
enabledbooleanno
namestringno

Example request: Replace the whole config (logos missing from it are deleted)

bash
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

json
{
  "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

json
{
  "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

StatusDescription
200ok
401unauthorized
403forbidden

PATCH /v1/brands/{brand} ​

  • Request: PATCH /v1/brands/
  • Operation: UpdateBrand
  • Operation ID: Brand_Patch
  • Authentication: access token, Authorization: Bearer YOUR_TOKEN

Parameters

NameInTypeRequiredDescription
brandpathstringyes

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.

FieldTypeRequiredConstraintsDescription
configobject or nullnoLook 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.accountsobject or nullnoSign-up and login on this domain. Each key overrides the server setting of the same name (host settings, accounts.*).
config.accounts.allow_passwordboolean or nullnoPassword login (default true).
config.accounts.allow_passwordlessboolean or nullnoPasskey login.
config.accounts.cross_sign_inboolean or nullnofalse: only accounts created on this domain can sign in here (default true).
config.accounts.federated_loginboolean or nullnoShow the identity provider buttons.
config.accounts.identity_providersarray of any or nullnoIdentity provider ids offered on this domain; empty offers every enabled one.
config.accounts.no_robotobject or nullnoreCAPTCHA on sign-up. The secret is only returned to admins.
config.accounts.no_robot.enabledboolean or nullno
config.accounts.no_robot.recaptchaobject or nullno
config.accounts.no_robot.recaptcha.secretstring or nullno
config.accounts.public_sign_upboolean or nullnoAnyone can create an account.
config.accounts.public_sign_up_member_ownerstring or nullnoOwner (admin or domain admin) of the project new members join.
config.accounts.public_sign_up_member_rolestring or nullnoRole id given to the new members.
config.accounts.public_sign_up_projectobject or nullno
config.accounts.public_sign_up_project.limit_bucket_accessboolean or nullno
config.accounts.public_sign_up_rolestring or nullnoRole of the new accounts: user or member.
config.accounts.require_2faboolean or nullnoRequire a second factor.
config.bright_logostring or nullnoMenu 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.copyrightstring or nullnoFooter text.
config.dark_logostring or nullnoPlatform 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.descriptionstring or nullnoMeta description (also og:description).
config.emailstring or nullnoSupport address shown in the menu (mailto). Not the sender of emails: see the brand email.
config.faviconstring or nullnoBrowser 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.iconstring or nullnoMenu 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_scriptsstring or nullnoRaw HTML/JS injected in the page head (analytics…). Empty uses the default tag manager.
config.keywordsstring or nullnoMeta keywords.
config.loginobject or nullnoLogin page.
config.login.background_colorstring or nullnoCSS color.
config.login.background_imagestring or nullnoImage URL.
config.login.background_stylestring or nullnoExtra CSS as "property:value;property:value" (values cannot contain '😂.
config.login.box_classstring or nullnoPosition of the login box: login-center, login-left or login-right.
config.login.box_stylestring or nullnoInline CSS of the login box.
config.namestring or nullnoCompany name, used as title prefix and logo alt text.
config.product_typesarray of object or null or nullnoOptions of the product type selector.
config.product_types[].labelstring or nullno
config.product_types[].valuestring or nullno
config.pwaobject or nullnoWeb app manifest (installable app). Served as is at /manifest.webmanifest.
config.pwa.background_colorstring or nullno
config.pwa.displaystring or nullnoe.g. standalone.
config.pwa.iconsarray of object or null or nullno192x192 and 512x512 icons, each for purpose any and maskable.
config.pwa.icons[].purposestring or nullnoany or maskable.
config.pwa.icons[].sizesstring or nullnoe.g. 192x192.
config.pwa.icons[].srcstring or nullnodata: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[].typestring or nullnoe.g. image/png.
config.pwa.namestring or nullno
config.pwa.short_namestring or nullno
config.pwa.start_urlstring or nullno
config.pwa.theme_colorstring or nullnoCSS color, also the browser theme color.
config.share_imagestring or nullnoImage 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_communityboolean or nullnoShow the community links in the menu (default true).
config.show_versionboolean or nullnoShow the server version (default true).
config.styleobject or nullno
config.style.topBarobject or nullnoConsole top bar.
config.style.topBar.backgroundstring or nullnoCSS color.
config.style.topBar.colorstring or nullnoCSS color of the text and icons.
config.titlestring or nullnoPage title (also og:title).
config.urlstring or nullnoLink of the logo on the login and public pages.
descriptionstringno
emailobject or nullnoEmails 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.customboolean or nullnotrue: send with settings instead of the server mail settings.
email.settingsobject or nullno
email.settings.fromstring or nullnoSender address.
email.settings.from_namestring or nullnoSender name.
email.settings.sesobject or nullno
email.settings.ses.aws_access_key_idstring or nullno
email.settings.ses.aws_regionstring or nullnoe.g. eu-west-1.
email.settings.ses.aws_secret_access_keystring or nullno
email.settings.smtpobject or nullno
email.settings.smtp.hoststring or nullno
email.settings.smtp.passwordstring or nullno
email.settings.smtp.portstring or integer or nullnoPattern: ^[0-9]{1,5}$As a string, e.g. "587" (numbers are ignored by the server).
email.settings.smtp.secureboolean or nullnotrue: implicit TLS (usually port 465); false: the server must offer STARTTLS (usually 587).
email.settings.smtp.usernamestring or nullno
email.settings.typestring or nullnosmtp or ses.
email.templatesobject or nullnoPer 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_passwordobject or nullno
email.templates.create_password.bodystring or nullnoHTML.
email.templates.create_password.enabledboolean or string or nullnoThe built-in defaults carry it as a string.
email.templates.create_password.fromstring or nullno
email.templates.create_password.from_namestring or nullno
email.templates.create_password.subjectstring or nullno
email.templates.device_disabledobject or nullno
email.templates.device_disabled.bodystring or nullnoHTML.
email.templates.device_disabled.enabledboolean or string or nullnoThe built-in defaults carry it as a string.
email.templates.device_disabled.fromstring or nullno
email.templates.device_disabled.from_namestring or nullno
email.templates.device_disabled.subjectstring or nullno
email.templates.email_verificationobject or nullno
email.templates.email_verification.bodystring or nullnoHTML.
email.templates.email_verification.enabledboolean or string or nullnoThe built-in defaults carry it as a string.
email.templates.email_verification.fromstring or nullno
email.templates.email_verification.from_namestring or nullno
email.templates.email_verification.subjectstring or nullno
email.templates.forgot_passwordobject or nullno
email.templates.forgot_password.bodystring or nullnoHTML.
email.templates.forgot_password.enabledboolean or string or nullnoThe built-in defaults carry it as a string.
email.templates.forgot_password.fromstring or nullno
email.templates.forgot_password.from_namestring or nullno
email.templates.forgot_password.subjectstring or nullno
enabledbooleanno
namestringno

Example request: Change the SMTP password

bash
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

json
{
  "config": {
    "title": "New Console Title"
  }
}

Example body: Disable public sign-up

json
{
  "config": {
    "accounts": {
      "public_sign_up": false
    }
  }
}

Example body: Remove a logo

json
{
  "config": {
    "icon": null
  }
}

Example body: Replace a logo

json
{
  "config": {
    "dark_logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
  }
}

Responses

StatusDescription
200ok
401unauthorized
403forbidden

DELETE /v1/brands/{brand} ​

  • Request: DELETE /v1/brands/
  • Operation: DeleteBrand
  • Operation ID: Brand_Delete
  • Authentication: access token, Authorization: Bearer YOUR_TOKEN

Parameters

NameInTypeRequiredDescription
brandpathstringyes

Example request

bash
curl -X DELETE 'https://YOUR_SERVER/v1/brands/YOUR_BRAND' \
  -H 'Authorization: Bearer YOUR_TOKEN'

Responses

StatusDescription
200ok
401unauthorized
403forbidden

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

NameInTypeRequiredDescription
brandpathstringyes

Request body (application/json, required)

FieldTypeRequiredConstraintsDescription
templatestringyesPattern: ^[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

bash
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

StatusDescription
200ok
401unauthorized
403forbidden