Menu

API reference · CRM

Import templates

crm · import_templates · 4 operations

GET/v1/crm/import-templates

List saved import templates

crm.import_templates.list

ReadIdempotentSince 2026-11-01

Lists the saved import templates of the organization (most recently updated first, paginated by cursor): name, destination (person, company, prospect, deal), the column → field mapping, the duplicates handling (behavior.deduplication, also in dedup_strategy), the cascade behavior and the default pipeline and currency. Use one with crm.imports.create (template_id) to import rows keyed by the same column names as the file the template was made for.

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

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

Parameters

limitintegerqueryoptional

How many items this page brings at most (see the maximum and the default in the schema).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

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

Save an import template

crm.import_templates.create

WriteSince 2026-11-01

Saves an import template: a name, the destination (person, company, prospect, deal), the column → field mapping (field_mapping: {"Email": "person.email", …}), the cascade and duplicates behavior (behavior; dedup_strategy is the same as behavior.deduplication, kept for older clients: send one of the two) and an optional default pipeline and currency. Requires the import_data permission of the CRM.

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

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

Parameters

namestringbodyrequired

Name shown in the import wizard, up to 120 characters.

destinationenumbodyrequired

What the rows become: person, company, prospect or deal.

Values: deal, prospect, person, company

field_mappingobjectbodyrequired

Column of the file → field (person.email, person.first_name, company.name, deal.title, cf:<custom field slug>…), up to 100; the column names are kept as written.

default_pipeline_idstringbodyoptional

Deals: the pipeline of rows without one (crm.pipelines.list).

default_currencystringbodyoptional

ISO 4217 code of values without a currency column.

dedup_strategyenumbodyoptional

Kept for older clients: the same as behavior.deduplication, which is what the import uses. Send one of the two; both must agree (import_template_dedup_mismatch).

Values: merge, create_activity, notify, skip

behaviorobjectbodyoptional

Companies, unmatched persons and duplicates (crm.imports.create explains each); without it, the destination's defaults.

Response

template_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/crm/import-templates" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "destination": "deal",
  "field_mapping": {}
}'

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/import-templates" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "destination": "deal",
  "field_mapping": {}
}'
PATCH/v1/crm/import-templates/{template_id}

Edit an import template

crm.import_templates.update

WriteIdempotentSince 2026-11-01

Changes the name, destination, mapping (field_mapping replaces the whole mapping), duplicates strategy, behavior, default pipeline or default currency of a saved import template; only what you send changes, and null clears the default pipeline or currency. Imports already done do not change. Requires the import_data permission of the CRM.

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

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

Parameters

template_idstringpathrequired

The template's id, from crm.import_templates.list.

namestringbodyoptional

Name shown in the import wizard.

destinationenumbodyoptional

What the rows become: person, company, prospect or deal.

Values: deal, prospect, person, company

default_pipeline_idstring | nullbodyoptional

Deals: the pipeline of rows without one; null clears it.

default_currencystring | nullbodyoptional

ISO 4217 code of values without a currency column; null clears it.

dedup_strategyenumbodyoptional

Kept for older clients: the same as behavior.deduplication, which is what the import uses. Send one of the two; both must agree (import_template_dedup_mismatch).

Values: merge, create_activity, notify, skip

behaviorobjectbodyoptional

Companies, unmatched persons and duplicates; replaces the saved one.

field_mappingobjectbodyoptional

Column of the file → field (person.email, person.first_name, company.name, deal.title, cf:<custom field slug>…), up to 100; the column names are kept as written.

Response

template_idstring

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/crm/import-templates/{template_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/import-templates/{template_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
DELETE/v1/crm/import-templates/{template_id}

Delete an import template

crm.import_templates.delete

IrreversibleSince 2026-11-01

Deletes a saved import template (the column mapping); imports already done do not change. A template is a saved setting, not a customer record: it does not go to the trash and cannot be undone, so outside the screen it requires a dry run and a confirm_token. Requires the import_data permission of the CRM.

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: import_data
MCP tool
crm_import_templates_deleteOn the full surface; on the compact one, mb_execute_operation with id: "crm.import_templates.delete".

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

Parameters

template_idstringpathrequired

The template's id, from crm.import_templates.list.

Response

template_idstring
oktrue

Errors

Example

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