{
  "info": {
    "_postman_id": "8fce011b-6288-4f94-812a-2cb03eda2e6d",
    "name": "Maestron API - CRM (parceiros)",
    "description": "API publica de parceiros (docs/7-public-api-and-api-keys.md). Cobre o modulo CRM completo: leitura e escrita de deals, pipelines/stages e activities, incluindo mover de etapa, ganho/perdido/reabertura e idempotencia. Autenticacao por API Key - nunca JWT de usuario. Gere uma chave em Configuracoes > API Keys no painel Maestron. Use uma chave com prefixo maestron_pk_test_ (variable environment=test) para testar sem gravar nada de verdade - toda escrita roda numa transacao que e sempre desfeita e a resposta vem com \"sandbox\": true. A pasta \"Captacao (intake)\" e a excecao: nao usa API Key, e sim o token publicavel mcf_ do formulario direto na URL (docs/9-crm-lead-capture.md). Defina a variable intake_token.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "event": [],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.maestron.com.br/api/v1",
      "type": "string",
      "description": "Troque para https://homolog-api.maestron.com.br/api/v1 se preferir testar em homolog antes."
    },
    {
      "key": "api_key",
      "value": "maestron_pk_test_COLE_SEU_SEGREDO_AQUI",
      "type": "string",
      "description": "Segredo completo da API Key, mostrado uma unica vez na criacao. Nunca commitar um valor real aqui. Use uma chave test_ para nao gravar nada de verdade."
    },
    {
      "key": "deal_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "pipeline_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "stage_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "activity_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "activity_type_id",
      "value": "",
      "type": "string",
      "description": "ID de um tipo de atividade. Pegue em uma atividade existente ou no painel Maestron."
    },
    {
      "key": "catalog_item_id",
      "value": "",
      "type": "string",
      "description": "ID de um item do catalogo do CRM (GET /crm/catalog-items)."
    },
    {
      "key": "intake_token",
      "value": "mcf_COLE_O_TOKEN_DO_FORMULARIO_AQUI",
      "type": "string",
      "description": "Token publicavel (mcf_...) de um formulario de captacao. Gere em CRM > Funil > aba Captacao no painel. E publico por natureza (vai no HTML do site), mas ainda assim nao commite um valor real."
    },
    {
      "key": "company_customer_id",
      "value": "",
      "type": "string",
      "description": "ID de uma company (GET /crm/companies)."
    },
    {
      "key": "contact_id",
      "value": "",
      "type": "string",
      "description": "ID de um contact (GET /crm/contacts)."
    },
    {
      "key": "event_id",
      "value": "",
      "type": "string",
      "description": "Cursor de paginacao (next_cursor de GET /crm/events), nao um ID de evento."
    }
  ],
  "item": [
    {
      "name": "Deals",
      "item": [
        {
          "name": "Listar negocios",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/deals?per_page=20&pipeline_id={{pipeline_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals"
              ],
              "query": [
                {
                  "key": "per_page",
                  "value": "20"
                },
                {
                  "key": "pipeline_id",
                  "value": "{{pipeline_id}}",
                  "description": "Opcional - filtra por pipeline (funnel_id)."
                },
                {
                  "key": "stage_id",
                  "value": "",
                  "description": "Opcional - filtra por estagio.",
                  "disabled": true
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Obter negocio",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}"
              ]
            }
          },
          "response": []
        },
        {
          "name": "Atividades do negocio",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}/activities",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}",
                "activities"
              ]
            }
          },
          "response": []
        },
        {
          "name": "Criar negocio",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"funnel_id\": \"{{pipeline_id}}\",\n  \"stage_id\": \"{{stage_id}}\",\n  \"contact_name\": \"Maria Silva\",\n  \"company_name\": \"Acme Ltda\",\n  \"client_email\": \"maria@acme.com.br\",\n  \"client_phone\": \"+55 11 99999-0000\",\n  \"contact_date\": \"2026-08-31\",\n  \"status\": \"sem_contato\",\n  \"temperature\": \"morno\",\n  \"source\": \"site\",\n  \"prospected_value\": 1500000,\n  \"probability\": 20,\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/deals",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals"
              ]
            },
            "description": "Escopo: crm.leads.create. idempotency_key e opcional (evita duplicar em retry). Requer chave test_ para nao gravar de verdade."
          },
          "response": []
        },
        {
          "name": "Atualizar negocio",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prospected_value\": 1800000,\n  \"probability\": 60,\n  \"notes\": \"Cliente pediu revisao de escopo.\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}"
              ]
            },
            "description": "Escopo: crm.leads.edit. Mudar funnel_id/assignee_id exige crm.leads.transfer; mudar status para kind ganho/perdido exige crm.leads.close."
          },
          "response": []
        },
        {
          "name": "Mover negocio de etapa",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"stage_id\": \"{{stage_id}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}/stage",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}",
                "stage"
              ]
            },
            "description": "Escopo: crm.leads.edit. O stage_id precisa pertencer ao mesmo funil do negocio, senao 422."
          },
          "response": []
        },
        {
          "name": "Marcar negocio como ganho",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}/win",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}",
                "win"
              ]
            },
            "description": "Escopo: crm.leads.close. status e opcional - so precisa ser enviado se o funil tiver mais de um status default do tipo ganho."
          },
          "response": []
        },
        {
          "name": "Marcar negocio como perdido",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}/lose",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}",
                "lose"
              ]
            },
            "description": "Escopo: crm.leads.close."
          },
          "response": []
        },
        {
          "name": "Reabrir negocio",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}/reopen",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}",
                "reopen"
              ]
            },
            "description": "Escopo: crm.leads.close."
          },
          "response": []
        },
        {
          "name": "Remover negocio",
          "event": [],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/deals/{{deal_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "deals",
                "{{deal_id}}"
              ]
            },
            "description": "Escopo: crm.leads.delete."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Pipelines",
      "item": [
        {
          "name": "Listar pipelines",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/pipelines?archived=false",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "pipelines"
              ],
              "query": [
                {
                  "key": "archived",
                  "value": "false",
                  "description": "true lista so os pipelines arquivados."
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Obter pipeline",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/pipelines/{{pipeline_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "pipelines",
                "{{pipeline_id}}"
              ]
            }
          },
          "response": []
        },
        {
          "name": "Listar estagios do pipeline",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/pipelines/{{pipeline_id}}/stages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "pipelines",
                "{{pipeline_id}}",
                "stages"
              ]
            }
          },
          "response": []
        },
        {
          "name": "Criar pipeline",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Funil Comercial\",\n  \"color\": \"#3b82f6\",\n  \"stages\": [\n    { \"name\": \"Sem contato\" },\n    { \"name\": \"Em negociacao\" },\n    { \"name\": \"Proposta enviada\" }\n  ],\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/pipelines",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "pipelines"
              ]
            },
            "description": "Escopo: crm.funnels.manage. Os catalogos de status/origem/motivo de perda/tipo de atividade sao sempre semeados com os padroes do sistema - nao sao customizaveis pela API publica."
          },
          "response": []
        },
        {
          "name": "Atualizar pipeline",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Funil Comercial 2026\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/pipelines/{{pipeline_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "pipelines",
                "{{pipeline_id}}"
              ]
            },
            "description": "Escopo: crm.funnels.manage. Enviar stages substitui a lista - um item sem id cria etapa nova, um estagio existente ausente do array e removido."
          },
          "response": []
        },
        {
          "name": "Remover pipeline",
          "event": [],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/pipelines/{{pipeline_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "pipelines",
                "{{pipeline_id}}"
              ]
            },
            "description": "Escopo: crm.funnels.manage. Remove tambem (soft delete) todos os negocios do funil."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Activities",
      "item": [
        {
          "name": "Listar atividades",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/activities?per_page=20&deal_id={{deal_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities"
              ],
              "query": [
                {
                  "key": "per_page",
                  "value": "20"
                },
                {
                  "key": "deal_id",
                  "value": "{{deal_id}}",
                  "description": "Opcional - filtra pelas atividades de um negocio."
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Obter atividade",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/activities/{{activity_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities",
                "{{activity_id}}"
              ]
            }
          },
          "response": []
        },
        {
          "name": "Criar atividade",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"lead_id\": \"{{deal_id}}\",\n  \"activity_type_id\": \"{{activity_type_id}}\",\n  \"subject\": \"Ligacao de follow-up\",\n  \"due_at\": \"2026-09-05T14:00:00Z\",\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/activities",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities"
              ]
            },
            "description": "Escopo: crm.leads.edit. activity_type_id precisa pertencer ao funil do negocio - nao ha endpoint publico de catalogo ainda, pegue o valor em uma atividade existente."
          },
          "response": []
        },
        {
          "name": "Atualizar atividade",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subject\": \"Ligacao de follow-up (reagendada)\",\n  \"due_at\": \"2026-09-06T14:00:00Z\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/activities/{{activity_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities",
                "{{activity_id}}"
              ]
            },
            "description": "Escopo: crm.leads.edit. lead_id nao e editavel - atividade nao migra de negocio."
          },
          "response": []
        },
        {
          "name": "Concluir atividade",
          "event": [],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/activities/{{activity_id}}/complete",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities",
                "{{activity_id}}",
                "complete"
              ]
            },
            "description": "Escopo: crm.leads.edit. Sem idempotency_key (nao suportado nesta rota)."
          },
          "response": []
        },
        {
          "name": "Reabrir atividade",
          "event": [],
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/activities/{{activity_id}}/reopen",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities",
                "{{activity_id}}",
                "reopen"
              ]
            },
            "description": "Escopo: crm.leads.edit. Sem idempotency_key (nao suportado nesta rota)."
          },
          "response": []
        },
        {
          "name": "Remover atividade",
          "event": [],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/activities/{{activity_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "activities",
                "{{activity_id}}"
              ]
            },
            "description": "Escopo: crm.leads.edit."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Catalogo do CRM",
      "item": [
        {
          "name": "Listar itens do catalogo",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/catalog-items?type=servico",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "catalog-items"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "servico",
                  "description": "produto ou servico"
                },
                {
                  "key": "active",
                  "value": "true",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "20",
                  "disabled": true
                }
              ]
            },
            "description": "Escopo: crm.view. Paginado, ordenado por nome."
          },
          "response": []
        },
        {
          "name": "Obter item do catalogo",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/catalog-items/{{catalog_item_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "catalog-items",
                "{{catalog_item_id}}"
              ]
            },
            "description": "Escopo: crm.view."
          },
          "response": []
        },
        {
          "name": "Criar item do catalogo",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/crm/catalog-items",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "catalog-items"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Licenca anual\",\n  \"type\": \"produto\",\n  \"price\": 120000,\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "description": "Escopo: crm.catalog.manage. price em centavos. Alternativa: enviar product_id (UUID de um produto do estoque) e omitir name/type/price - sao copiados do produto."
          },
          "response": []
        },
        {
          "name": "Atualizar item do catalogo",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/crm/catalog-items/{{catalog_item_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "catalog-items",
                "{{catalog_item_id}}"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"price\": 99900,\n  \"active\": false\n}"
            },
            "description": "Escopo: crm.catalog.manage. Enviar product_id: null desfaz o vinculo com o estoque."
          },
          "response": []
        },
        {
          "name": "Remover item do catalogo",
          "event": [],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/catalog-items/{{catalog_item_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "catalog-items",
                "{{catalog_item_id}}"
              ]
            },
            "description": "Escopo: crm.catalog.manage. Soft delete."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Companies e Contacts",
      "item": [
        {
          "name": "Listar companies",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/companies",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "companies"
              ],
              "query": [
                {
                  "key": "kind",
                  "value": "organization",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "20",
                  "disabled": true
                }
              ]
            },
            "description": "Escopo: customers.view."
          },
          "response": []
        },
        {
          "name": "Obter company",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/companies/{{company_customer_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "companies",
                "{{company_customer_id}}"
              ]
            },
            "description": "Escopo: customers.view."
          },
          "response": []
        },
        {
          "name": "Criar company",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/crm/companies",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "companies"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"organization\",\n  \"name\": \"Nova Cliente LTDA\",\n  \"document\": \"12.345.678/0001-90\",\n  \"email\": \"contato@novacliente.com\",\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "description": "Escopo: customers.manage. kind: individual ou organization."
          },
          "response": []
        },
        {
          "name": "Atualizar company",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/crm/companies/{{company_customer_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "companies",
                "{{company_customer_id}}"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"active\": false\n}"
            },
            "description": "Escopo: customers.manage."
          },
          "response": []
        },
        {
          "name": "Remover company",
          "event": [],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/companies/{{company_customer_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "companies",
                "{{company_customer_id}}"
              ]
            },
            "description": "Escopo: customers.manage."
          },
          "response": []
        },
        {
          "name": "Listar contacts",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/contacts?company_id={{company_customer_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "contacts"
              ],
              "query": [
                {
                  "key": "company_id",
                  "value": "{{company_customer_id}}"
                }
              ]
            },
            "description": "Escopo: customers.view. company_id filtra por uma company; omitir lista todos."
          },
          "response": []
        },
        {
          "name": "Obter contact",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/contacts/{{contact_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "contacts",
                "{{contact_id}}"
              ]
            },
            "description": "Escopo: customers.view."
          },
          "response": []
        },
        {
          "name": "Criar contact",
          "event": [],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/crm/contacts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "contacts"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"company_id\": \"{{company_customer_id}}\",\n  \"name\": \"Maria Compras\",\n  \"role\": \"Compradora\",\n  \"email\": \"maria@acme.com\",\n  \"idempotency_key\": \"{{$guid}}\"\n}"
            },
            "description": "Escopo: customers.manage. A company precisa ser organization."
          },
          "response": []
        },
        {
          "name": "Atualizar contact",
          "event": [],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/crm/contacts/{{contact_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "contacts",
                "{{contact_id}}"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"Gerente de Compras\"\n}"
            },
            "description": "Escopo: customers.manage."
          },
          "response": []
        },
        {
          "name": "Remover contact",
          "event": [],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/contacts/{{contact_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "contacts",
                "{{contact_id}}"
              ]
            },
            "description": "Escopo: customers.manage. strategy no corpo (unlink padrao, delete_leads, migrate)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Webhooks do CRM",
      "item": [
        {
          "name": "Listar eventos (polling)",
          "event": [],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/events?limit=50",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50"
                },
                {
                  "key": "funnel_id",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "event",
                  "value": "lead.won",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true
                }
              ]
            },
            "description": "Escopo: crm.view. Exige a feature de plano integrations.webhooks. Ordenado por occurred_at crescente; use next_cursor da resposta para paginar."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Captacao (intake)",
      "description": "Captacao publica de leads por formulario (docs/9-crm-lead-capture.md). NAO usa API Key - o token publicavel mcf_ do formulario vai direto na URL. Defina a variable intake_token com um token real. Cada request aqui sobrescreve a auth da colecao para noauth.",
      "item": [
        {
          "name": "Baixar a tag intake.js",
          "event": [],
          "request": {
            "method": "GET",
            "auth": {
              "type": "noauth"
            },
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/intake/1.0/intake.js",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "intake",
                "1.0",
                "intake.js"
              ]
            },
            "description": "Asset publico, sem token. Versao fixa na URL (1.0), cacheado no Cloudflare. Cole no site: <script async src=\"https://api.maestron.com.br/api/v1/crm/intake/1.0/intake.js\" data-maestron-token=\"mcf_...\"></script>."
          },
          "response": []
        },
        {
          "name": "Ler config do formulario",
          "event": [],
          "request": {
            "method": "GET",
            "auth": {
              "type": "noauth"
            },
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/intake/{{intake_token}}/config",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "intake",
                "{{intake_token}}",
                "config"
              ]
            },
            "description": "Consumido pela tag intake.js para se autoconfigurar (selector, field_map, honeypot_field, capture_utm, success_message). Nao expoe origens permitidas, responsavel nem contadores. Token inexistente ou formulario desativado -> 404."
          },
          "response": []
        },
        {
          "name": "Captar lead",
          "event": [],
          "request": {
            "method": "POST",
            "auth": {
              "type": "noauth"
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_name\": \"Maria Silva\",\n  \"client_email\": \"maria@acme.com.br\",\n  \"client_phone\": \"+55 11 99999-0000\",\n  \"company_name\": \"Acme Ltda\",\n  \"notes\": \"Quero um orcamento.\",\n  \"page_url\": \"https://www.acme.com.br/contato\",\n  \"referrer\": \"https://www.google.com/\",\n  \"utm\": { \"source\": \"google\", \"medium\": \"cpc\", \"campaign\": \"institucional\" }\n}"
            },
            "url": {
              "raw": "{{base_url}}/crm/intake/{{intake_token}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "intake",
                "{{intake_token}}"
              ]
            },
            "description": "Cria um negocio no funil/etapa fixados no formulario (resolvidos server-side - o payload nao os escolhe). 201 com { id }. Honeypot preenchido ou duplicata dentro da janela de dedupe -> 202 silencioso. Sem nenhum de contact_name/client_email/client_phone -> 422. Campos fora do mapa entram nas observacoes do lead. Rate limit 20/min por token e 10/min por IP."
          },
          "response": []
        },
        {
          "name": "Pagina de formulario hospedada",
          "event": [],
          "request": {
            "method": "GET",
            "auth": {
              "type": "noauth"
            },
            "header": [],
            "url": {
              "raw": "{{base_url}}/crm/intake/{{intake_token}}/form?title=Fale conosco",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "crm",
                "intake",
                "{{intake_token}}",
                "form"
              ],
              "query": [
                {
                  "key": "title",
                  "value": "Fale conosco",
                  "description": "Opcional - titulo da pagina."
                },
                {
                  "key": "accent",
                  "value": "16a34a",
                  "description": "Opcional - cor de destaque, hex de 6 digitos.",
                  "disabled": true
                }
              ]
            },
            "description": "HTML sem marca (so o nome da empresa), responsivo, pronto pra compartilhar como link ou embedar em <iframe>. Campos derivados do field_map + nome/email/telefone, honeypot embutido."
          },
          "response": []
        }
      ]
    }
  ]
}
