Set colours and theme (options + logo)

Overview

Set the colours, theme options, and logo in one call.

Use this as an alternative to Set colours and theme when you also want to upload a logo.

You'll need the theme values and optionally a logo.

The theme is saved and applied. The saving user is taken from the token, so there's no user_id field. The response has the saved theme and the account's white-label branding, with image fields as full URLs (null when unset).

Prerequisites

  • A bearer token. See Authentication.
  • The company_id of the account you're theming, inside your own account tree.
  • To upload a logo: a JPEG or PNG no larger than 400 KB.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/theme-options/save

Authentication

Partner or Account token

  • The target company_id must be inside your own account tree.
  • A Partner token can target any account under the partner; an Account token only its own account.
  • A company_id outside your tree is rejected with 422.

Rate limit

This endpoint has no rate limit.

Request parameters

None.

Request body

Choose the content type to match what you are sending:

You are sendingContent type
Theme options onlyapplication/json
Theme options and a logo filemultipart/form-data

Both accept the same fields. Use multipart/form-data whenever you attach logo_image, because a file can't travel in a JSON body. Send each field as its own form part and let curl set the boundary; don't set Content-Type yourself.

FieldTypeRequiredDescription
company_idintegerYesThe account to theme. Must exist and be inside your account tree.
theme_optionsstringYesThe theme settings as a JSON-encoded string, saved as sent.
logo_imagefile (image)NoJPEG or PNG, at most 400 KB. Replaces the account's white-label logo.

Request payload

JSON, theme options only:

{
  "company_id": 5994,
  "theme_options": "{\"mode\":\"light\",\"primaryColor\":\"#f26b21\"}"
}

With a logo, send the same fields as form parts, plus logo_image (see Example request).

Response body

The payload is inside data.

FieldTypeDescription
statusstringsuccess.
messagestringTheme options saved successfully.
dataobjectThe saved theme.
data.idintegerThe theme setting's id.
data.user_idinteger or nullThe user who last saved the theme.
data.company_idintegerThe account.
data.theme_optionsstringThe theme settings, as saved (a JSON-encoded string).
data.deleted_atstring or nullnull.
data.created_atstringWhen the theme was first saved (ISO 8601).
data.updated_atstringWhen the theme was last saved (ISO 8601).
white_labelobjectThe account's white-label branding: id, company_id, domain_name, white_url, title and status when white label is set up, and the image URLs.
white_label.company_idintegerThe account.
white_label.logostring or nullURL of the main logo, or null.
white_label.login_logostring or nullURL of the login-page logo, or null.
white_label.mobile_logostring or nullURL of the mobile logo, or null.
white_label.faviconstring or nullURL of the favicon, or null.

Response payload

{
  "data": {
    "status": "success",
    "message": "Theme options saved successfully.",
    "data": {
      "id": 5,
      "user_id": 3011,
      "company_id": 5994,
      "theme_options": "{\"mode\":\"light\",\"primaryColor\":\"#f26b21\"}",
      "deleted_at": null,
      "created_at": "2026-09-28T14:54:45.000000Z",
      "updated_at": "2026-09-28T14:54:46.000000Z"
    },
    "white_label": {
      "company_id": 5994,
      "logo": null,
      "login_logo": null,
      "mobile_logo": null,
      "favicon": null
    }
  }
}

Examples

Success payload

See Response payload.

Error payload

422 Required fields missing

{
  "message": "The company id field is required. (and 1 more error)",
  "errors": {
    "company_id": [
      "The company id field is required."
    ],
    "theme_options": [
      "The theme options field is required."
    ]
  }
}

422 Account outside your tree

{
  "message": "The selected company id does not belong to your company hierarchy.",
  "errors": {
    "company_id": [
      "The selected company id does not belong to your company hierarchy."
    ]
  }
}

422 Account doesn't exist

{
  "message": "The selected company id is invalid. (and 1 more error)",
  "errors": {
    "company_id": [
      "The selected company id is invalid.",
      "The selected company id does not belong to your company hierarchy."
    ]
  }
}
StatusMeaning
200The theme was saved.
401The token is missing, expired or invalid.
422company_id or theme_options is missing, company_id doesn't exist or is outside your tree, or the logo is too large or the wrong type.
500Unexpected server error.

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/theme-options/save" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --form 'company_id=5994' \
  --form 'theme_options={"mode":"system","primaryColor":"#f1874c"}' \
  --form 'logo_image=@logo_image.png'

Did this page help you?