Menu

Referência da API · CRM

Mesclagens

crm · merge · 2 operações

POST/v1/crm/merge/preview

Preview a merge

crm.merge.preview

LeituraIdempotenteDesde 2026-11-01

Dry run of crm.merge.execute for two deals, persons, companies or prospects: the fields where both have a different value (to choose per field, by the names choices takes: job_title, custom_fields.<slug>), how much history will move (activities, conversations, messages, notes), the related company/person duplicates worth merging too, and the full field comparison (each value as the app shows it and as stored). Nothing is written.

Escopo
crm:read
Permissão
Ver o módulo
Tool do MCP
crm_merge_previewNa superfície completa; na compacta, mb_execute_operation com id: "crm.merge.preview".

Custo declarado: até 14 leituras e 0 escritas por chamada (contam na cota diária).

Parâmetros

kindenumcorpoobrigatório

What is merged: two deals, persons, companies or prospects.

Valores: deal, person, company, prospect

survivor_idstringcorpoobrigatório

The record that remains (it keeps its id and, by default, its values).

loser_idstringcorpoobrigatório

The duplicate absorbed into survivor_id (it stays as a tombstone that points to the survivor).

Resposta

kindenum

Valores: deal, person, company, prospect

survivor_idstring
loser_idstring
conflictsarray<object>

The fields where both records have a different value: choose the side per field in choices of crm.merge.execute (the survivor's by default).

countsobject

How much of the loser's history moves to the survivor.

related_dupsarray<object>

Related records (the companies or persons of the two) that may be duplicates too: pass them in cascades to merge them in the same call.

comparisonarray<object>

Every field of the two records, side by side.

loser_is_won_dealboolean

Deals: the absorbed deal is won; its close stops counting (the survivor keeps its own status).

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/crm/merge/preview" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "kind": "deal",
  "survivor_id": "SURVIVOR_ID",
  "loser_id": "LOSER_ID"
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/merge/preview" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "kind": "deal",
  "survivor_id": "SURVIVOR_ID",
  "loser_id": "LOSER_ID"
}'
POST/v1/crm/merge

Merge two records

crm.merge.execute

IrreversívelDesde 2026-11-01

Merges loser_id into survivor_id (same kind: deal, person, company or prospect): the loser's history, links, lists and enrollments move to the survivor, the survivor keeps its values unless choices says otherwise per field (field name → survivor or loser, as crm.merge.preview names them: a field that cannot be chosen for that kind is merge_choice_unknown; arrays are united, empty fields filled), and the loser stays as a tombstone that points to the survivor. A full copy of the loser goes to the trash (not restorable automatically). cascades merges related records with default choices. Requires the delete permission of the kind. Outside the screen it requires a dry run and a confirm_token.

Pede confirmação: primeiro dry_run: true (prévia e confirm_token, válido por 10 minutos e por uma única execução), depois o mesmo corpo com confirm_token. Em algumas poucas, só com certos dados: a descrição diz quando. Por que e como: Prévia e confirmação.

Escopo
crm:write e «Permitir exclusões» (crm:delete no OAuth)
Permissão
Editar no módulo
Tool do MCP
crm_merge_executeNa superfície completa; na compacta, mb_execute_operation com id: "crm.merge.execute".

Custo declarado: até 60 leituras e 60 escritas por chamada (contam na cota diária).

Parâmetros

kindenumcorpoobrigatório

What is merged: two deals, persons, companies or prospects.

Valores: deal, person, company, prospect

survivor_idstringcorpoobrigatório

The record that remains (it keeps its id and, by default, its values).

loser_idstringcorpoobrigatório

The duplicate absorbed into survivor_id (it stays as a tombstone that points to the survivor).

choicesobjectcorpoopcional

Per field in conflict, which side wins: survivor (the default) or loser. Keys are the field names crm.merge.preview returns in conflicts (title, first_name, job_title…; snake_case or camelCase) and custom_fields.<slug> for a custom field. A key that is not a field of that kind, or a custom field neither record has, is merge_choice_unknown.

cascadesarray<object>corpoopcional

Related merges to run in the same call with the default choices (the relatedDups of crm.merge.preview: the two companies or persons behind two deals), up to 5.

Resposta

survivor_idstring
loser_idstring
reanchoredobject
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/crm/merge" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "deal",
  "survivor_id": "SURVIVOR_ID",
  "loser_id": "LOSER_ID",
  "dry_run": true
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/merge" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "deal",
  "survivor_id": "SURVIVOR_ID",
  "loser_id": "LOSER_ID",
  "dry_run": true
}'