{
  "info": {
    "name": "CRM MCP e REST API — mcp.ai",
    "description": "REST API for the CRM MCP e REST API MCP. Set {{apiKey}} to a workspace key (sk_live_…) created at https://mcp.ai/settings/api-keys.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.mcp.ai/api/crm",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "sk_live_...",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "crm_add_field",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/add/field",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "add",
            "field"
          ]
        },
        "description": "Adiciona um CAMPO custom a um objeto (sem migração; registros antigos ficam sem a key). Tipos: string text integer float boolean date datetime singleselect multiselect email phone url currency relatio",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"key\": \"\",\n  \"label\": \"\",\n  \"type\": \"\",\n  \"required\": false,\n  \"unique\": false,\n  \"indexed\": false,\n  \"options\": \"\",\n  \"relation\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_confirm_upload",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/confirm/upload",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "confirm",
            "upload"
          ]
        },
        "description": "Confirma o upload depois do PUT na upload_url (o storage valida o tamanho real). Marca o arquivo como pronto e contabiliza no uso.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"file_id\": \"\",\n  \"account\": \"\",\n  \"file_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_create_records",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/records",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "records"
          ]
        },
        "description": "Cria um registro (ou vários) de um objeto. Passe `object` (ex.: 'contact', 'deal') e `data` (objeto JSON com os campos por key). Para vários, use `records` (array JSON de {data}).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"data\": \"\",\n  \"metadata\": \"\",\n  \"records\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_define_object",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/define/object",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "define",
            "object"
          ]
        },
        "description": "Cria um OBJETO custom no CRM (além de contact/company/deal) e ganha CRUD/API automático. Passe `key` (api name, a-z/0-9/_), `label` e opcionalmente `fields` (array JSON de definições de campo).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"key\": \"\",\n  \"label\": \"\",\n  \"module\": \"\",\n  \"display_field\": \"\",\n  \"fields\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_delete_file",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/file",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "file"
          ]
        },
        "description": "Remove um ou mais arquivos (apaga do storage e libera o espaço contabilizado).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"ids\": \"\",\n  \"file_id\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_delete_object",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/object",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "object"
          ]
        },
        "description": "Remove um objeto CUSTOM (objetos de sistema não podem ser removidos). Se houver registros, passe delete_records:true para apagar tudo junto.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"delete_records\": false,\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_delete_records",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/records",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "records"
          ]
        },
        "description": "Remove um ou mais registros de um objeto por id.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"ids\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_describe",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/describe",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "describe"
          ]
        },
        "description": "Descreve o schema do CRM: todos os objetos (contact, company, deal e quaisquer custom) com seus campos (key, tipo, obrigatório, opções, relações) e o kanban. CHAME ISTO PRIMEIRO para saber quais objet",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_download_file",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/download/file",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "download",
            "file"
          ]
        },
        "description": "Gera uma URL presigned de download (GET) pra um arquivo. A URL expira em alguns minutos.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"file_id\": \"\",\n  \"account\": \"\",\n  \"file_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_get_file",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/file",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "file"
          ]
        },
        "description": "Metadados de um arquivo (nome, tamanho, content_type, status, anexo).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"file_id\": \"\",\n  \"account\": \"\",\n  \"file_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_get_object",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/object",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "object"
          ]
        },
        "description": "Detalha UM objeto: seu rótulo, kanban e todos os campos (key, tipo, obrigatório, opções, relação). Versão focada do crm_describe.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_get_records",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/records",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "records"
          ]
        },
        "description": "Busca um ou mais registros de um objeto por id.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"ids\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_link_record",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/link/record",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "link",
            "record"
          ]
        },
        "description": "Liga um registro a outro por um campo de relação (ex.: vincular um contato a uma empresa). Para relação 'many' adiciona ao conjunto; para 'single' define o alvo.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"id\": \"\",\n  \"field\": \"\",\n  \"target_id\": \"\",\n  \"account\": \"\",\n  \"ids\": \"\",\n  \"target_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_list_accounts",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/accounts",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "accounts"
          ]
        },
        "description": "Lista os CRMs conectados neste install. Retorna cada um com id, rótulo e is_default (true quando só há um, não precisa passar `account` nas outras tools).",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_list_files",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/files",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "files"
          ]
        },
        "description": "Lista os arquivos do CRM (id, nome, tamanho, status). Opcionalmente filtra os anexados a um objeto/registro.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"record_id\": \"\",\n  \"account\": \"\",\n  \"record_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_list_objects",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/objects",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "objects"
          ]
        },
        "description": "Lista os objetos do CRM (key, rótulo, módulo, kanban). Versão enxuta do crm_describe, sem os campos.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_list_records",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/records",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "records"
          ]
        },
        "description": "Lista registros de um objeto, com filtro/ordenação/paginação. `filter` é um objeto JSON: {campo: valor} ou {campo: {op: valor}} (ops: eq ne gt gte lt lte in nin contains exists).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"filter\": \"\",\n  \"sort\": \"\",\n  \"limit\": 0,\n  \"offset\": 0,\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_move_stage",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/move/stage",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "move",
            "stage"
          ]
        },
        "description": "Move um registro de um objeto kanban (ex.: deal) para outra etapa do funil. Valida a etapa contra as opções do campo de stage.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"id\": \"\",\n  \"stage\": \"\",\n  \"account\": \"\",\n  \"ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_publish_file",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/publish/file",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "publish",
            "file"
          ]
        },
        "description": "Torna um arquivo PÚBLICO e devolve uma URL estável (`https://api.mcp.ai/f/<token>`) pra embutir num site (ex.: thumbnail). O objeto continua privado no storage, o token é a chave (revogável com crm_un",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"file_id\": \"\",\n  \"account\": \"\",\n  \"file_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_related_records",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/related/records",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "related",
            "records"
          ]
        },
        "description": "Resolve os registros relacionados de um registro: segue os campos de relação e devolve os registros-alvo (todos, ou só de um `field`).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"id\": \"\",\n  \"field\": \"\",\n  \"account\": \"\",\n  \"ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_remove_field",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/remove/field",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "remove",
            "field"
          ]
        },
        "description": "Remove um campo CUSTOM (soft-delete: some do schema, mas os valores já gravados ficam preservados). Campos de sistema não podem ser removidos.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"key\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_search",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/search",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "search"
          ]
        },
        "description": "Busca textual nos registros (por nome/título/valores). Opcionalmente restrita a um `object`.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"q\": \"\",\n  \"object\": \"\",\n  \"limit\": 0,\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_unlink_record",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/unlink/record",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "unlink",
            "record"
          ]
        },
        "description": "Desfaz uma relação. Para relação 'many' remove o target_id do conjunto; para 'single' limpa o campo (target_id opcional).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"id\": \"\",\n  \"field\": \"\",\n  \"target_id\": \"\",\n  \"account\": \"\",\n  \"ids\": \"\",\n  \"target_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_unpublish_file",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/unpublish/file",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "unpublish",
            "file"
          ]
        },
        "description": "Revoga o link público de um arquivo (o token para de funcionar na hora).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"file_id\": \"\",\n  \"account\": \"\",\n  \"file_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_update_field",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/field",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "field"
          ]
        },
        "description": "Edita um campo: rótulo, obrigatório, visível, posição, opções, indexação. Mudança de TIPO só é permitida se for um alargamento seguro (ex.: integer→float); mudança com perda é bloqueada (crie um campo",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"key\": \"\",\n  \"type\": \"\",\n  \"label\": \"\",\n  \"required\": false,\n  \"visible\": false,\n  \"position\": 0,\n  \"indexed\": false,\n  \"options\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_update_object",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/object",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "object"
          ]
        },
        "description": "Edita um objeto: rótulo, campo de exibição, módulo ou config de kanban (a key é imutável). Vale para objetos de sistema e custom.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"label\": \"\",\n  \"display_field\": \"\",\n  \"module\": \"\",\n  \"kanban\": \"\",\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_update_records",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/records",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "records"
          ]
        },
        "description": "Atualiza um registro (merge parcial) por id. Passe `object`, `id` e `data` (só os campos a mudar; null apaga o campo). Para vários, use `updates` (array JSON de {id, data}).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"object\": \"\",\n  \"id\": \"\",\n  \"data\": \"\",\n  \"metadata\": \"\",\n  \"updates\": \"\",\n  \"account\": \"\",\n  \"ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_upload_file",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/upload/file",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "upload",
            "file"
          ]
        },
        "description": "Inicia o upload de um arquivo (até 200 MB) e devolve uma URL presigned (`upload_url`) pra fazer o PUT direto no storage, mais o `file_id`. Depois do PUT, chame crm_confirm_upload. Opcional: anexe a um",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"filename\": \"\",\n  \"size\": 0,\n  \"content_type\": \"\",\n  \"object\": \"\",\n  \"record_id\": \"\",\n  \"account\": \"\",\n  \"record_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_upload_from_url",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/upload/from/url",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "upload",
            "from",
            "url"
          ]
        },
        "description": "Sobe um arquivo A PARTIR DE UMA URL (a plataforma baixa e armazena, até 200 MB) — o jeito do AGENTE subir via API sem segurar os bytes. Devolve o arquivo já pronto. Opcional: anexe a um registro com o",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"url\": \"\",\n  \"filename\": \"\",\n  \"content_type\": \"\",\n  \"object\": \"\",\n  \"record_id\": \"\",\n  \"account\": \"\",\n  \"record_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "crm_usage",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/usage",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "usage"
          ]
        },
        "description": "Uso de storage deste CRM: bytes do banco + bytes de arquivos, total em GB, nº de arquivos e egress acumulado. É a base do que é cobrado (storage GB-mês + egress).",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    }
  ]
}