Registers the organization's own domain for team access (app.youragency.com): validates it (a real hostname, never mb-suite.com or a hosting provider's domain: for an MB Suite address use branding.subdomain.set), checks that no other organization nor this organization's client portal uses it, registers it with the hosting provider and saves it unverified and enabled. Only one custom domain per organization: with one already set, 409 branding_domain_already_set (remove it first); the same domain again changes nothing (changed false). Returns the address and, when the provider asks for ownership proof, verification_record (a TXT record to publish); the CNAME must point to cname.vercel-dns.com. Then branding.custom_domain.verify. Fires branding.domain.added. Owners and admins with edit access to Branding.
Instructions for agents
Give the person the DNS steps: a CNAME from the hostname to the cname_target of branding.domains.get and, if verification_record came back, that TXT record too; then verify with branding.custom_domain.verify.
Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.
Scope
branding:write
Permission
Edit in the module · Only owner, admin
MCP tool
branding_custom_domain_addOn the full surface; on the compact one, mb_execute_operation with id: "branding.custom_domain.add".
Declared cost: up to 16 reads and 1 writes per call (they count against the daily quota). Touches an external platform (vercel): it counts against the external operations quota.
Parameters
domainstringbodyrequired
The hostname, without scheme or path (app.youragency.com).
With a test API key the request always goes to your practice organization: example data you can reset.In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.
POST/v1/branding/custom-domain/verify
Verify the team's custom domain
branding.custom_domain.verify
WriteIdempotentSince 2026-11-01
Asks the hosting provider whether the team's custom domain is ready: verified (ownership proven) and configured (the CNAME points to MB Suite). When both hold, the address is marked verified and starts serving the white-label app (fires branding.domain.verified, once). Otherwise returns verified false with configured, verification_record (the TXT record still to publish, if any) and message saying what is missing; DNS changes can take a while to propagate, so it can be called again later. Not found without a custom domain. Owners and admins with edit access to Branding.
Scope
branding:write
Permission
Edit in the module · Only owner, admin
MCP tool
branding_custom_domain_verifyOn the full surface; on the compact one, mb_execute_operation with id: "branding.custom_domain.verify".
Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota). Touches an external platform (vercel): it counts against the external operations quota.
curl-X POST "https://api.mb-suite.com/v1/branding/custom-domain/verify" \
-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.In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.
POST/v1/branding/custom-domain/toggle
Turn the team's custom domain on or off
branding.custom_domain.toggle
WriteIdempotentSince 2026-11-01
Turns the team's custom domain on (enabled true) or off without removing it: off, the address stops opening the white-label app but its registration, verification and DNS stay, so turning it on again is immediate. Already in that state, nothing changes (changed false). Not found without a custom domain. Owners and admins with edit access to Branding.
Scope
branding:write
Permission
Edit in the module · Only owner, admin
MCP tool
branding_custom_domain_toggleOn the full surface; on the compact one, mb_execute_operation with id: "branding.custom_domain.toggle".
Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).
Parameters
enabledbooleanbodyrequired
true turns the address on, false turns it off without removing it.
Removes the team's custom domain: it stops opening MB Suite, it is released from the hosting provider (unless another organization also has it registered, or the provider fails: released_from_hosting false, the organization is cleaned anyway) and it is cleared from the organization. The domain's DNS records are not touched. There is no trash: to undo, add it again and verify it again. Not found without a custom domain. Outside the app it needs a dry run and its confirm_token. Fires branding.domain.removed. Owners and admins with edit access to Branding.
Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.
Scope
branding:writeand “Allow deletions” (branding:delete in OAuth)
Permission
Edit in the module · Only owner, admin
MCP tool
branding_custom_domain_removeOn the full surface; on the compact one, mb_execute_operation with id: "branding.custom_domain.remove".
Declared cost: up to 16 reads and 1 writes per call (they count against the daily quota). Touches an external platform (vercel): it counts against the external operations quota.
With a test API key the request always goes to your practice organization: example data you can reset.In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.