Menu

API reference · CRM

Assignment rules

crm · assignment_rules · 5 operations

GET/v1/crm/assignment-rules

List lead assignment rules

crm.assignment_rules.list

ReadIdempotentSince 2026-11-01

Lists the lead assignment rules, newest first (up to 200): each one's scope (one lead source, one pipeline, or global; a global rule can be limited to prospects or deals with entity_type), method (round_robin, weighted_round_robin, capacity, territory, source, value or manual), participants with their name, weight, capacity and out-of-office flag, territory_ids, special rules, fallback and who gets notified.

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

Declared cost: up to 200 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/assignment-rules" \
  -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/assignment-rules" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/crm/assignment-rules/{rule_id}

Get one lead assignment rule

crm.assignment_rules.get

ReadIdempotentSince 2026-11-01

Returns one assignment rule with its scope, method, participants, territories, special rules, fallback and notification settings. Use crm.assignment_rules.list when you do not know the id.

Scope
crm:read
Permission
View the module
MCP tool
crm_assignment_rules_getOn the full surface; on the compact one, mb_execute_operation with id: "crm.assignment_rules.get".

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

Parameters

rule_idstringpathrequired

The rule's id, from crm.assignment_rules.list.

Response

idstring
org_idstring
namestring
methodenum

Values: round_robin, weighted_round_robin, capacity, territory, source, value, manual

participantsarray<object>
special_rulesarray<object>
fallbackenum

Values: unassigned, round_robin, notify_admin, specific_user

last_assigned_indexnumber
created_atnumber
updated_atnumber
created_by_idstring
pipeline_idstring | null
source_idstring | null
entity_typeenum | null

Values: prospect, deal

territory_idsarray<string> | null
fallback_user_idstring | null
notify_ownerboolean
notify_extra_user_idsarray<string> | null

Errors

Example

curl "https://api.mb-suite.com/v1/crm/assignment-rules/{rule_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/crm/assignment-rules/{rule_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/assignment-rules

Create a lead assignment rule

crm.assignment_rules.create

WriteSince 2026-11-01

Creates a lead assignment rule: a name; its scope (source_id for one lead source, pipeline_id for one pipeline, or neither for a global rule, which can be limited to prospect or deal with entity_type); the method; participants (user_id from crm.team.list: people with access to the organization or AI agents of the CRM team; the name is filled in by the server; optional weight or max_capacity, is_out_of_office); territory_ids for the territory method (from crm.territories.list); optional special rules, evaluated first by priority; the fallback (unassigned, round_robin, notify_admin, or specific_user with fallback_user_id); and whether to notify the assigned owner (default true) and extra users. Every reference is checked: participant_not_found, fallback_user_required, recipient_without_access, territory_not_found, lead_source_not_found, pipeline_not_found. Requires manage_assignment (owners, admins and CRM admins).

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

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

Parameters

namestringbodyrequired

The rule's name.

methodenumbodyrequired

How the owner is chosen: round_robin, weighted_round_robin, capacity, territory (territory_ids), source, value or manual.

Values: round_robin, weighted_round_robin, capacity, territory, source, value, manual

participantsarray<object>bodyrequired

Who receives the leads, up to 100.

fallbackenumbodyrequired

When nobody fits: unassigned, round_robin, notify_admin or specific_user (with fallback_user_id).

Values: unassigned, round_robin, notify_admin, specific_user

pipeline_idstringbodyoptional

Scope: only the leads of this pipeline (crm.pipelines.list).

source_idstringbodyoptional

Scope: only the leads of this lead source (crm.lead_sources.list); more specific than a pipeline.

entity_typeenumbodyoptional

Only for a global rule (no source nor pipeline): limit it to prospects or deals.

Values: prospect, deal

territory_idsarray<string>bodyoptional

Territories for the territory method, in order (crm.territories.list).

special_rulesarray<object>bodyoptional

Conditions evaluated first, by priority; the first that matches assigns its user or method.

Default: []

fallback_user_idstringbodyoptional

The owner when fallback is specific_user: a person with access or an AI agent of the CRM team.

notify_ownerbooleanbodyoptional

Notify the assigned owner (default true).

notify_extra_user_idsarray<string>bodyoptional

Other people notified of each assigned lead, up to 50 (people with access to the organization).

Response

idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/crm/assignment-rules" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "method": "round_robin",
  "participants": [],
  "fallback": "unassigned"
}'

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/assignment-rules" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "method": "round_robin",
  "participants": [],
  "fallback": "unassigned"
}'
PATCH/v1/crm/assignment-rules/{rule_id}

Update a lead assignment rule

crm.assignment_rules.update

WriteIdempotentSince 2026-11-01

Updates any field of an assignment rule through updates: a field left out does not change, and null clears an optional one (pipeline_id, source_id, entity_type, territory_ids, fallback_user_id, notify_extra_user_ids). Participants and special rules are replaced as a whole; the references sent are checked like at creation. Turning a source or pipeline rule into a global one (no source nor pipeline left) needs confirm_global: true outside the app (rule_scope_widening otherwise): every lead without a more specific rule would follow it. Requires manage_assignment.

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

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

Parameters

rule_idstringpathrequired

The rule's id, from crm.assignment_rules.list.

updatesobjectbodyrequired

The fields to change; what is not sent is kept.

confirm_globalbooleanbodyoptional

Send true when the change makes the rule global (no source nor pipeline left): outside the app it is refused otherwise, because every lead without a more specific rule would follow it.

Response

oktrue

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/crm/assignment-rules/{rule_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/crm/assignment-rules/{rule_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
POST/v1/crm/assignment-rules/{rule_id}/delete

Delete a lead assignment rule

crm.assignment_rules.delete

IrreversibleIdempotentSince 2026-11-01

Deletes an assignment rule for good: rules do not go to the trash, and leads stop being routed through it; the dry run names it and its scope. assignment_rule_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_assignment_rules_deleteOn the full surface; on the compact one, mb_execute_operation with id: "crm.assignment_rules.delete".

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

Parameters

rule_idstringpathrequired

The rule's id, from crm.assignment_rules.list.

Response

oktrue

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/crm/assignment-rules/{rule_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/assignment-rules/{rule_id}/delete" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'