Menu

API reference · CRM

Cascade archive

crm · archive_cascade · 3 operations

POST/v1/crm/archive-cascade/preview

Preview an archive with linked records

crm.archive_cascade.preview

ReadIdempotentSince 2026-11-01

Dry run of crm.archive_cascade.execute for a prospect, person, company or deal (root: { type, id }, or entity_type + entity_id as crm.delete_cascade takes them): returns the root, the linked persons and companies that can be archived with it (archivable: no other active deal or prospect uses them) and the ones that must stay (kept, with the reason: shared_active_deals, shared_active_prospects or too_large). Nothing is written. Pass the ids you choose from archivable as also_archive. Requires the archive permission of the root type (archive_prospect, or edit_deal / edit_person / edit_company).

Scope
crm:read
Permission
Edit in the module
MCP tool
crm_archive_cascade_previewOn the full surface; on the compact one, mb_execute_operation with id: "crm.archive_cascade.preview".

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

Parameters

rootobjectbodyoptional

The record to archive (the root): { type, id }. Send this or entity_type + entity_id, not both.

entity_typeenumbodyoptional

The kind of the root record, as crm.delete_cascade takes it (with entity_id).

Values: prospect, person, company, deal

entity_idstringbodyoptional

The root record, by id (with entity_type).

Response

rootobject
archivablearray<object>
keptarray<object>

Errors

Example

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

Archive a record with chosen linked records

crm.archive_cascade.execute

WriteSince 2026-11-01

Archives a prospect, person, company or deal (root: { type, id }, or entity_type + entity_id) and, optionally, the linked persons and companies listed in also_archive. The plan is rebuilt right before writing: anything not archivable at that moment (not linked to the root, or used by another active deal or prospect) is skipped and counted in skipped. Archiving is a state, not the trash: archived records leave lists, forecasts and reports and come back by unarchiving; nothing is deleted. reason is saved only on a prospect root. It does not emit webhook events. Requires the archive permission of the root type (archive_prospect, or edit_deal / edit_person / edit_company).

Scope
crm:write
Permission
Edit in the module
MCP tool
crm_archive_cascade_executeOn the full surface; on the compact one, mb_execute_operation with id: "crm.archive_cascade.execute".

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

Parameters

rootobjectbodyoptional

The record to archive (the root): { type, id }. Send this or entity_type + entity_id, not both.

entity_typeenumbodyoptional

The kind of the root record, as crm.delete_cascade takes it (with entity_id).

Values: prospect, person, company, deal

entity_idstringbodyoptional

The root record, by id (with entity_type).

also_archivearray<object>bodyoptional

The linked persons and companies to archive too, chosen from archivable of crm.archive_cascade.preview (up to 500).

Default: []

reasonstringbodyoptional

Why: saved only when the root is a prospect.

Response

archivednumber
skippednumber

Errors

Example

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

Archive many records with their linked records

crm.archive_cascade.bulk

WriteBulk · up to 500Since 2026-11-01

Archives up to 500 roots of one type (prospects, persons, companies or deals: root_type + root_ids, or entity_type + entity_ids) and, with also_archive_persons / also_archive_companies, the persons and companies linked to them that no active record outside the batch uses (computed on the server; linked ids are never sent). A Manager archives any root; a seller only their own and the unassigned ones (one foreign id rejects the whole batch); ids that do not exist are skipped. Archiving is a state, not the trash. It does not emit webhook events. Bulk: outside the screen it requires a dry run (which returns the counts) and a confirm_token.

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
Permission
Edit in the module
MCP tool
crm_archive_cascade_bulkOn the full surface; on the compact one, mb_execute_operation with id: "crm.archive_cascade.bulk".

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

Parameters

root_typeenumbodyoptional

The kind of the root records (with root_ids). Send root_type + root_ids, or entity_type + entity_ids.

Values: prospect, person, company, deal

root_idsarray<string>bodyoptional

The root records, by id.

entity_typeenumbodyoptional

The same as root_type, by the name crm.delete_cascade uses.

Values: prospect, person, company, deal

entity_idsarray<string>bodyoptional

The same as root_ids, by the name crm.delete_cascade uses.

also_archive_personsbooleanbodyoptional

Also archive the linked persons that no active record outside the batch uses.

Default: false

also_archive_companiesbooleanbodyoptional

Also archive the linked companies that no active record outside the batch uses.

Default: false

reasonstringbodyoptional

Why: saved only on prospect roots.

Response

archivednumber
skippednumber

Errors

Example

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