Menu

API reference · CRM

Territories

crm · territories · 4 operations

GET/v1/crm/territories

List sales territories

crm.territories.list

ReadIdempotentSince 2026-11-01

Lists the organization's sales territories by name (up to 500), each with the countries (ISO codes), regions and industries it covers and the sellers assigned to it (assigned_user_ids). An assignment rule with method territory routes a lead to the first of its territories that covers the lead's country or region and rotates among that territory's sellers.

Scope
crm:read
Permission
View the module
MCP tool
crm_territories_listOn the full surface; on the compact one, mb_execute_operation with id: "crm.territories.list".

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

Parameters

No parameters.

Response

dataarray<object>

Errors

Example

curl "https://api.mb-suite.com/v1/crm/territories" \
  -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/crm/territories" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/territories

Create a sales territory

crm.territories.create

WriteSince 2026-11-01

Creates a sales territory with a name, optional description, the countries (ISO 3166-1 alpha-2 codes such as ar or mx, or global: country_invalid otherwise), regions and industries it covers, and the sellers assigned to it (assigned_user_ids: people with access to the organization, from crm.team.list; may be empty; recipient_without_access otherwise). Use its id in an assignment rule's territory_ids (method territory). Requires manage_assignment (owners, admins and CRM admins).

Scope
crm:write
Permission
Edit in the module · CRM action: manage_assignment
MCP tool
crm_territories_createOn the full surface; on the compact one, mb_execute_operation with id: "crm.territories.create".

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

Parameters

namestringbodyrequired

The territory's name, up to 120 characters.

assigned_user_idsarray<string>bodyrequired

The sellers the territory's leads rotate among, up to 200: people with access to the organization (user ids from crm.team.list; AI agents are not assigned by territory).

descriptionstringbodyoptional

A description, up to 500 characters.

countriesarray<string>bodyoptional

ISO 3166-1 alpha-2 country codes (ar, mx, us…; case-insensitive) or global, up to 100: a lead from one of them matches the territory.

regionsarray<string>bodyoptional

Regions or states as the leads bring them, up to 100.

industriesarray<string>bodyoptional

Industries, up to 100.

Response

territory_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/crm/territories" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "assigned_user_ids": [
    "ASSIGNED_USER_ID"
  ]
}'

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/crm/territories" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "assigned_user_ids": [
    "ASSIGNED_USER_ID"
  ]
}'
PATCH/v1/crm/territories/{territory_id}

Update a sales territory

crm.territories.update

WriteIdempotentSince 2026-11-01

Updates a territory: only the fields sent change (description null clears it; each list sent replaces the current one), validated like at creation; with nothing to change, no_changes. Requires manage_assignment.

Scope
crm:write
Permission
Edit in the module · CRM action: manage_assignment
MCP tool
crm_territories_updateOn the full surface; on the compact one, mb_execute_operation with id: "crm.territories.update".

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

Parameters

territory_idstringpathrequired

The territory's id, from crm.territories.list.

namestringbodyoptional

New name.

descriptionstring | nullbodyoptional

New description; null clears it.

countriesarray<string>bodyoptional

The whole new list: ISO 3166-1 alpha-2 country codes (ar, mx, us…; case-insensitive) or global, up to 100: a lead from one of them matches the territory.

regionsarray<string>bodyoptional

The whole new list of regions.

industriesarray<string>bodyoptional

The whole new list of industries.

assigned_user_idsarray<string>bodyoptional

The whole new list: The sellers the territory's leads rotate among, up to 200: people with access to the organization (user ids from crm.team.list; AI agents are not assigned by territory).

Response

oktrue

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/crm/territories/{territory_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 PATCH "https://api.mb-suite.com/v1/crm/territories/{territory_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/territories/{territory_id}/delete

Delete a sales territory

crm.territories.delete

IrreversibleIdempotentSince 2026-11-01

Deletes a territory for good: territories do not go to the trash. Assignment rules that list it simply skip it from then on (remove it from their territory_ids with crm.assignment_rules.update to keep them tidy); the dry run names the territory and those rules. territory_not_found when the id does not exist (also in the dry run). Requires manage_assignment.

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
crm:write and “Allow deletions” (crm:delete in OAuth)
Permission
Edit in the module · CRM action: manage_assignment
MCP tool
crm_territories_deleteOn the full surface; on the compact one, mb_execute_operation with id: "crm.territories.delete".

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

Parameters

territory_idstringpathrequired

The territory's id, from crm.territories.list.

Response

oktrue

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/crm/territories/{territory_id}/delete" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

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/crm/territories/{territory_id}/delete" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'