Theme Options - Save (options + logo)

Overview

Create or update the latest RsUserThemeSetting for an account, recording the authenticated user as its author. You supply the theme as a theme_options JSON string. When a logo_image file is also sent, it is stored to S3 and written onto the account's RsWhiteLabel logo. This route differs from /account/white-label/theme/save: it does not take a user_id and always uses the authenticated user.

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 only when you attach logo_image, because a file cannot travel in a JSON body.

Prerequisites

  • A bearer token in the Authorization header.

Base URL

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

Endpoint

POST /api/v1/theme-options/save

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Who can call it: account-level tokens.

  • The target company_id must sit inside your own account tree.

  • A partner token can target any account beneath it. An account user is limited to its own part of the tree.

  • A company_id outside your hierarchy is rejected with 422.

Rate limit

  • No rate limit.

Request body

FieldTypeRequiredDescription
company_idintegerRequiredMust be an existing account inside your own account tree.
theme_optionsstringRequiredJSON-encoded theme settings, stored verbatim.
logo_imagefile (image)OptionalJPEG/PNG, max 400 KB.

How it works

  • 200 with { status, message, data, white_label }: data is the saved RsUserThemeSetting row; white_label carries company_id and S3-resolved logo/login_logo/mobile_logo/favicon (null when unset).
  • 422 if company_id is missing/invalid/out of hierarchy, theme_options is missing, or logo_image is too large / wrong type.

Response

200 OK · 200

{
  "data": {
    "status": "success",
    "message": "Theme options saved successfully.",
    "data": {
      "company_id": "6",
      "user_id": 3,
      "theme_options": "{\"mode\":\"system\",\"skin\":\"default\",\"primaryColor\":\"#f1874c\"}",
      "updated_at": "2026-06-16T10:50:03.000000Z",
      "created_at": "2026-06-16T10:50:03.000000Z",
      "id": 2
    },
    "white_label": {
      "company_id": "6",
      "logo": null,
      "login_logo": null,
      "mobile_logo": null,
      "favicon": null
    }
  }
}

422 Validation error · 422

{
  "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."
    ]
  }
}

Errors

StatusMeaning
401The bearer token is missing, expired or invalid
422Validation error
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=123' \
  --form 'theme_options={"mode":"system","skin":"default","primaryColor":"#f1874c"}' \
  --form 'logo_image=@logo_image.png'

Did this page help you?