Menu

API reference · Client Portal

Settings

client_portal · settings · 2 operations

GET/v1/client-portal/settings

Get the client portal settings

client_portal.settings.get

ReadIdempotentSince 2026-11-01

Returns this workspace's client portal setup: name (the portal's own or the organization's), logo, logo_dark and favicon (absolute URLs), slug (the <slug>.mb-suite.com subdomain) and subdomain_enabled, the custom domain with domain_verified and domain_enabled, configured (false while there is no subdomain: clients cannot be invited until there is one) and urls (the addresses clients use today, custom domain first). Only owners and admins.

Scope
client_portal:read
Permission
View the module · Only owner, admin
MCP tool
client_portal_settings_getOn the full surface; on the compact one, mb_execute_operation with id: "client_portal.settings.get".

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

Parameters

No parameters.

Response

namestring

The portal's name (its own or the organization's).

logostring | null

The logo (an absolute URL).

logo_darkstring | null

The logo for dark backgrounds (an absolute URL).

faviconstring | null

The browser icon (an absolute URL).

slugstring | null

The subdomain label (<slug>.mb-suite.com); null while there is none.

subdomain_enabledboolean

True when the subdomain is on.

domainstring | null

The custom domain, if any.

domain_verifiedboolean

True when the custom domain's DNS is verified.

domain_enabledboolean

True when the custom domain is on.

configuredboolean

False while there is no subdomain: clients cannot be invited until there is one.

urlsarray<string>

The addresses clients use today (custom domain first).

Errors

Example

curl "https://api.mb-suite.com/v1/client-portal/settings" \
  -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/client-portal/settings" \
  -H "Authorization: Bearer $MB_TEST_KEY"
PATCH/v1/client-portal/settings

Rename the portal or turn its addresses on or off

client_portal.settings.update

WriteIdempotentSince 2026-11-01

Edits the client portal settings that do not touch another platform: updates.name (portal name in the browser tab, the login page and invitation emails), updates.subdomain_enabled and updates.domain_enabled (turn the <slug>.mb-suite.com address or the custom domain on or off; turning one on requires it to exist: portal_subdomain_not_set / portal_domain_not_set, 409). With an address off, clients see an «unavailable» page there; the change can take up to 5 minutes to show. Adding, changing or removing the subdomain or the custom domain is branding.portal_domains.add / branding.portal_domains.remove (and verifying the domain, branding.portal_domains.verify); the logos and the favicon are uploaded in the app. Returns the settings and changed_fields (empty when nothing changed). Only owners and admins.

Scope
client_portal:write
Permission
Edit in the module · Only owner, admin
MCP tool
client_portal_settings_updateOn the full surface; on the compact one, mb_execute_operation with id: "client_portal.settings.update".

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

Parameters

updatesobjectbodyrequired

What changes (name, subdomain_enabled, domain_enabled): only the fields sent.

Response

settingsobject
changed_fieldsarray<string>

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/client-portal/settings" \
  -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/client-portal/settings" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'