Menu

API reference · Reports

Themes

reports · themes · 5 operations

GET/v1/reports/themes

List report themes

reports.themes.list

ReadIdempotentSince 2026-11-01

Lists the report themes available to the organization: the four system themes (classic, elegant, playful, bold; first, unless include_system is false) and the organization's own, newest first, in one list paginated by cursor (the system themes count in limit). Each theme has seven hex colors and its fonts. Apply one to a template, report or instance with theme_id + theme_source. Requires view access to Reports.

Scope
reports:read
Permission
View the module
MCP tool
reports_themes_listOn the full surface; on the compact one, mb_execute_operation with id: "reports.themes.list".

Declared cost: up to 51 reads and 0 writes per call (they count against the daily quota).

Parameters

limitintegerqueryoptional

How many themes per page (default 50, at most 200).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, to get the next one; omit it for the first page.

include_systembooleanqueryoptional

Include the four system themes first (default true); they count in limit.

Default: true

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/reports/themes" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/reports/themes" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/reports/themes/{theme_id}

Get a report theme

reports.themes.get

ReadIdempotentSince 2026-11-01

Returns one report theme: a system one (classic, elegant, playful, bold) or the organization's, with its colors and fonts; without source it looks in both. Not found if the id does not exist. Requires view access to Reports.

Scope
reports:read
Permission
View the module
MCP tool
reports_themes_getOn the full surface; on the compact one, mb_execute_operation with id: "reports.themes.get".

Declared cost: up to 1 reads and 0 writes per call (they count against the daily quota).

Parameters

theme_idstringpathrequired

The theme id (reports.themes.list): a system one (classic, elegant, playful, bold) or the organization's.

sourceenumqueryoptional

organization or system; omit it to look in both.

Values: organization, system

Response

idstring

Theme id.

namestring

Name.

is_systemboolean

A system theme (read-only).

colorsobject

Colors.

typographyobject

Fonts.

created_atnumber | null

Created (epoch ms); null for system themes.

updated_atnumber | null

Last edited (epoch ms); null for system themes.

created_bystring | null

Uid of who created it.

Errors

Example

curl "https://api.mb-suite.com/v1/reports/themes/{theme_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/reports/themes/{theme_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/reports/themes

Create a report theme

reports.themes.create

WriteSince 2026-11-01

Creates a report theme of the organization: a name (up to 100 characters), seven colors as #rrggbb (primary, secondary, background, text, heading, border, accent) and the fonts (Inter, Merriweather, Roboto, Playfair Display or Montserrat; an optional separate heading font). Returns the theme id. Requires edit access to Reports.

Scope
reports:write
Permission
Edit in the module
MCP tool
reports_themes_createOn the full surface; on the compact one, mb_execute_operation with id: "reports.themes.create".

Declared cost: up to 0 reads and 1 writes per call (they count against the daily quota).

Parameters

namestringbodyrequired

Theme name.

colorsobjectbodyrequired

The theme's colors, all #RRGGBB.

typographyobjectbodyrequired

The theme's fonts.

Response

theme_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/reports/themes" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "colors": {},
  "typography": {}
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/reports/themes" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "colors": {},
  "typography": {}
}'
PATCH/v1/reports/themes/{theme_id}

Update a report theme

reports.themes.update

WriteIdempotentSince 2026-11-01

Updates the name, the colors (all seven) or the fonts of one of the organization's report themes; everything that uses it changes look. System themes cannot be edited (409 system_theme_read_only). Returns the updated theme. Fields go inside updates. Requires edit access to Reports.

Scope
reports:write
Permission
Edit in the module
MCP tool
reports_themes_updateOn the full surface; on the compact one, mb_execute_operation with id: "reports.themes.update".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

theme_idstringpathrequired

The id of one of the organization's own themes (reports.themes.list, is_system false).

updatesobjectbodyrequired

The fields to change.

Response

themeobject

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/reports/themes/{theme_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X PATCH "https://api.mb-suite.com/v1/reports/themes/{theme_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
DELETE/v1/reports/themes/{theme_id}

Delete a report theme

reports.themes.delete

IrreversibleSince 2026-11-01

Deletes one of the organization's report themes; it stays 30 days in the trash. Templates, reports and instances that used it fall back to the default look until it is restored (it comes back with the same id): the dry run says how many use it. System themes cannot be deleted (409 system_theme_read_only). Requires edit access to Reports. Outside the screen it needs a dry run and a confirm_token, or a key with deletion enabled.

With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.

Scope
reports:write and “Allow deletions” (reports:delete in OAuth)
Permission
Edit in the module
MCP tool
reports_themes_deleteOn the full surface; on the compact one, mb_execute_operation with id: "reports.themes.delete".

Declared cost: up to 1 reads and 2 writes per call (they count against the daily quota).

Parameters

theme_idstringpathrequired

The id of one of the organization's own themes (reports.themes.list, is_system false).

Response

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/reports/themes/{theme_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X DELETE "https://api.mb-suite.com/v1/reports/themes/{theme_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"