www.x32.com.br

API pública do X32 CRM

Integre seu site, loja virtual, ERP ou ferramentas como n8n e Make ao seu CRM.

Começando

A API está disponível nos planos Padrão e Completo. Cada empresa tem seu próprio endereço:

https://SUA-EMPRESA.crm.x32.com.br/api/x32

Gere o token em Configurações → API pública dentro do CRM (até 3 tokens por empresa). Envie em todas as chamadas um destes cabeçalhos:

token: SEU_TOKEN
Authorization: Bearer SEU_TOKEN

O token pode ser leitura e escrita ou só leitura (apenas GET). Use o token só no servidor, nunca em JavaScript de página.

Limite: 60 chamadas por minuto por token. Acima disso, a resposta é 429 com o cabeçalho Retry-After (segundos para tentar de novo).

Envie e receba JSON (Content-Type: application/json). Datas no formato ISO 8601 (2026-11-01T10:00:00-03:00) ou 2026-11-01 10:00.

Exemplo

curl -X POST https://SUA-EMPRESA.crm.x32.com.br/api/x32/leads \
  -H "token: SEU_TOKEN" -H "Content-Type: application/json" \
  -d '{"nome":"Maria Silva","email":"maria@exemplo.com","celular":"62999990000","mensagem":"Quero uma proposta"}'

Respostas e erros

Toda resposta tem status (true ou false). Erros trazem mensagem; erros de validação trazem também errors por campo.

CódigoQuando
200 / 201Sucesso / registro criado.
401Token inválido ou não informado.
403Token só de leitura, plano sem API ou conta em teste grátis.
404Registro não encontrado.
409Já existe (e-mail, CNPJ ou nome). A resposta traz o id do registro existente.
422Dados inválidos.
429Limite de chamadas por minuto atingido.
503Consulta temporariamente indisponível.

Listas

As listas são paginadas: ?pagina=1&por_pagina=50 (máximo 100). A resposta traz dados, pagina, por_pagina, total e paginas. Para sincronizar, use o filtro atualizado_desde.

Leads

GET/leadsLista. Filtros: funil_id, etapa_id, origem_id, responsavel_id, pessoa_id, situacao (aberto, ganho, perdido), busca (título), criado_desde, criado_ate, atualizado_desde.
POST/leadsCria o lead, e o contato e a organização se ainda não existirem (procura pelo e-mail, telefone e CNPJ). O responsável é escolhido em rodízio entre os usuários ativos.
GET/leads/{id}Lead com contato e dados de rastreamento (UTM, gclid, fbclid).
PUT/leads/{id}Altera só os campos enviados: titulo, descricao, valor, responsavel_id, origem_id, tipo_id, pessoa_id, previsao_fechamento.
PUT/leads/{id}/etapaMuda a etapa: etapa_id ou etapa (código: won = ganho, lost = perdido). Perdido aceita motivo_perda.
POST/leads/{id}/notasInclui uma nota no histórico: texto.

Campos do POST /leads

Obrigatório: nome ou razao. Opcionais: email, telefone, celular, cargo, cpf, nascimento, sexo, razao, fantasia, cnpj, cnae, fundacao, endereco, bairro, cidade, uf, cep, titulo, mensagem, valor, origem (nome da origem), utm_source, utm_medium, utm_campaign, utm_content, utm_term, gclid, fbclid, landing_page, referrer.

{"status": true, "lead_id": 120, "pessoa_id": 88, "organizacao_id": 31}

Contatos

GET/contatosLista. Filtros: busca (nome), email, telefone, organizacao_id, atualizado_desde.
POST/contatosCria. nome e pelo menos email ou telefone. E-mail já cadastrado: 409 com contato_id.
GET/contatos/{id}Um contato.
PUT/contatos/{id}Altera só os campos enviados.

Campos: nome, email ou emails (lista), telefone, celular ou telefones (lista), cargo, cpf, nascimento (AAAA-MM-DD), sexo (Masculino, Feminino, Outro, Prefere não informar; aceita também M/F), organizacao_id, responsavel_id.

Organizações

GET/organizacoesLista. Filtros: busca (nome), cnpj, atualizado_desde.
POST/organizacoesCria. nome obrigatório. CNPJ ou nome já cadastrado: 409 com organizacao_id.
GET/organizacoes/{id}Uma organização.
PUT/organizacoes/{id}Altera só os campos enviados.

Campos: nome, cnpj, fantasia, cnae, site, fundacao (AAAA-MM-DD), endereco, bairro, cidade, uf, cep, responsavel_id.

Atividades

GET/atividadesLista. Filtros: lead_id, pessoa_id, tipo, responsavel_id, pendentes=1, de, ate, atualizado_desde.
POST/atividadesCria, ligada a lead_id e/ou pessoa_id.
GET/atividades/{id}Uma atividade.
PUT/atividades/{id}Altera titulo, descricao, local, inicio, fim, concluida, responsavel_id.

tipo: call (ligação), meeting (reunião), lunch (almoço) ou note (nota). Ligação, reunião e almoço precisam de titulo e inicio; nota precisa de descricao.

Produtos

GET/produtosLista. Filtros: busca, sku, ean, origem, externo_id, atualizado_desde.
POST/produtosCria, ou atualiza se já existir o mesmo origem + externo_id (ou o mesmo sku). A resposta diz se foi atualizado.
GET/produtos/{id}Um produto.
PUT/produtos/{id}Altera só os campos enviados.

Campos: nome, sku, ean, descricao, preco, quantidade, origem (ex.: woocommerce) e externo_id (código do produto no seu sistema).

Pedidos

GET/pedidosLista. Filtros: status, pessoa_id, lead_id, origem, externo_id, numero, de, ate, atualizado_desde.
POST/pedidosCria, ou atualiza se já existir o mesmo origem + externo_id.
GET/pedidos/{id}Pedido com itens.
PUT/pedidos/{id}Altera só os campos enviados (ex.: status). Se enviar itens, a lista é trocada.

O cliente vai em pessoa_id ou no objeto cliente (nome, email, telefone, celular, razao, cnpj, endereco, cidade, uf, cep), que é procurado ou criado como contato. Pedido novo e mudança de status ficam registrados no histórico do contato.

status: pendente, aguardando_pagamento, pago, processando, enviado, concluido, cancelado, reembolsado, falhou. Sem total, o CRM calcula: soma dos itens − desconto + frete.

{
  "origem": "woocommerce", "externo_id": "1532", "numero": "1532", "status": "pago",
  "data_pedido": "2026-11-01T10:00:00-03:00", "forma_pagamento": "Pix", "frete": 15.90,
  "cliente": {"nome": "Maria Silva", "email": "maria@exemplo.com", "celular": "62999990000"},
  "itens": [{"externo_id": "88", "sku": "CAM-P", "nome": "Camiseta P", "quantidade": 2, "preco": 49.90}]
}

Vendas (ERP)

Para integrar o ERP: cada venda vai num só envio, com o cliente, os itens e os produtos. O CRM procura ou cadastra o cliente e os produtos, grava a venda em Pedidos e, quando ela está paga ou concluída, cria um lead ganho com os produtos (entra no dashboard, em "produtos mais vendidos", e nos relatórios).

POST/vendasRegistra a venda. Reenviar a mesma venda (mesmo erp + venda.id) atualiza status, valores e itens. Para consultar depois, use GET /pedidos?origem=SEU_ERP&externo_id=CODIGO.

Corpo

CampoDescrição
erpNome do sistema de origem (ex.: meu-erp). Padrão: erp. Fica como origem do pedido e dos produtos.
gerar_leadPadrão true. Com false, grava só o pedido (sem lead ganho).
venda (objeto)
id *Código da venda no ERP (até 100 caracteres).
numeroNúmero exibido (pedido, NF...).
dataData e hora da venda. Padrão: agora.
statusconcluido (padrão), pago, processando, enviado = lead ganho. pendente, aguardando_pagamento = só o pedido. cancelado, reembolsado, falhou = lead perdido (se já existir).
total, desconto, freteValores. Sem total, o CRM calcula: soma dos itens − desconto + frete.
forma_pagamento, observacaoTexto livre.
vendedor_emailE-mail do usuário do CRM que fez a venda (fica como responsável do lead).
lead_idLead do CRM que originou a venda: ele é marcado como ganho, em vez de criar um lead novo.
endereco_entregaObjeto livre. Sem ele, usa o endereço do cliente.
cliente (objeto)
tipo *fisica ou juridica.
nomeNome da pessoa (física) ou do cliente (jurídica, se não houver razao_social).
email, telefone, celularContato.
cpf, nascimento, sexoPessoa física. O cliente é procurado pelo CPF, depois pelo e-mail e telefone.
razao_social, nome_fantasia, cnpj, fundacaoPessoa jurídica: vira organização (procurada pelo CNPJ e pelo nome).
enderecoObjeto: logradouro, numero, complemento, bairro, cidade, uf, cep.
contatoPessoa jurídica: quem compra pela empresa (nome, email, telefone, celular, cargo, cpf).
itens (lista, ao menos 1)
quantidade *Quantidade vendida.
preco_unitario, desconto, totalSem total: quantidade × preço − desconto.
produto *Objeto: id (código no ERP), sku, ean, nome *, descricao, preco. Procurado pelo código do ERP, SKU ou EAN; se não existir, é cadastrado.

* obrigatório.

Exemplo: pessoa jurídica

{
  "erp": "meu-erp",
  "venda": {
    "id": "V-10293", "numero": "10293", "data": "2026-11-01T10:00:00-03:00", "status": "concluido",
    "forma_pagamento": "Boleto 30 dias", "desconto": 10.00, "frete": 25.00,
    "vendedor_email": "vendedor@suaempresa.com.br"
  },
  "cliente": {
    "tipo": "juridica", "razao_social": "Mercado Bom Preço Ltda", "nome_fantasia": "Bom Preço",
    "cnpj": "12.345.678/0001-90", "fundacao": "2015-03-10", "email": "compras@bompreco.com.br",
    "endereco": {"logradouro": "Rua Duque de Caxias", "numero": "317", "bairro": "Jardim Salvador",
                 "cidade": "Trindade", "uf": "GO", "cep": "75380-000"},
    "contato": {"nome": "João Souza", "celular": "62999990000", "cargo": "Comprador"}
  },
  "itens": [
    {"quantidade": 10, "preco_unitario": 12.50,
     "produto": {"id": "P-88", "sku": "ARZ-5KG", "ean": "7891234567890", "nome": "Arroz 5 kg"}},
    {"quantidade": 4, "preco_unitario": 39.90,
     "produto": {"id": "P-91", "nome": "Óleo de soja cx 12"}}
  ]
}

Exemplo: pessoa física

{
  "erp": "meu-erp",
  "venda": {"id": "V-10294", "status": "pago", "total": 89.90},
  "cliente": {"tipo": "fisica", "nome": "Maria Silva", "cpf": "123.456.789-09", "nascimento": "1990-05-10",
              "sexo": "F", "email": "maria@exemplo.com", "celular": "62988887777"},
  "itens": [{"quantidade": 1, "preco_unitario": 89.90, "produto": {"id": "P-12", "nome": "Cafeteira"}}]
}

Resposta

{"status": true, "atualizado": false, "pedido_id": 57, "lead_id": 310, "pessoa_id": 88, "organizacao_id": 31,
 "produtos": [{"externo_id": "P-88", "produto_id": 14}, {"externo_id": "P-91", "produto_id": 15}],
 "pedido": { ... }}

Código 201 na primeira vez e 200 quando atualiza. A venda também dispara os webhooks pedido.criado / pedido.atualizado e fica registrada como nota no histórico do cliente.

Funis, origens e usuários

Para saber os ids usados nos filtros e nas alterações:

GET/funisFunis com as etapas (id, nome, código, probabilidade).
GET/origensOrigens dos leads.
GET/tiposTipos de lead.
GET/usuariosUsuários (id, nome, e-mail, ativo).

Consultas

Consultas só de leitura, com o mesmo token e limite. A resposta traz os dados em dados.

GET/consultas/cnpj/{cnpj}Empresa pelo CNPJ (só números): razão social, fantasia, situação, abertura, CNAE, porte, MEI, capital, endereço, telefones, e-mail e sócios.
GET/consultas/cep/{cep}Endereço do CEP, com latitude e longitude quando houver.
GET/consultas/ncm/{ncm}Descrição do NCM.
GET/consultas/produto/{ean}Produto pelo código de barras (EAN): descrição, embalagem, imagem, NCM, CEST, últimos preços e médias de custo e preço.

Webhooks

Cadastre em Configurações → API pública → Webhooks um endereço https:// do seu sistema. O CRM envia um POST em JSON a cada evento escolhido:

lead.criadoLead criado
lead.atualizadoLead alterado
lead.etapa_alteradaLead mudou de etapa (inclui ganho e perdido)
contato.criadoContato criado
pedido.criadoPedido recebido
pedido.atualizadoPedido alterado
{
  "evento": "lead.etapa_alterada",
  "empresa": "sua-empresa",
  "ocorrido_em": "2026-11-01T10:00:00-03:00",
  "dados": { "id": 120, "titulo": "...", "situacao": "ganho", "etapa_anterior_id": 3, ... }
}

Confira a origem pelo cabeçalho X-X32-Assinatura: sha256= + HMAC-SHA256 do corpo recebido, com o segredo do webhook. Em PHP:

$corpo = file_get_contents('php://input');
$ok = hash_equals('sha256=' . hash_hmac('sha256', $corpo, $segredo), $_SERVER['HTTP_X_X32_ASSINATURA'] ?? '');

Responda com um código 2xx em até 10 segundos. Se falhar, o CRM tenta de novo em 1, 5, 30, 120 e 720 minutos. O cabeçalho X-X32-Envio identifica o envio, para você ignorar repetições.

MCP (assistentes de IA)

No plano Completo, o CRM também é um servidor MCP: conecte o Claude, o ChatGPT, o n8n ou outro assistente que aceite MCP e peça em português, por exemplo "quais leads entraram esta semana?" ou "agende uma ligação amanhã às 10h com a Maria".

https://SUA-EMPRESA.crm.x32.com.br/api/x32/mcp

Transporte HTTP (Streamable HTTP, JSON-RPC 2.0), com o mesmo token, a mesma permissão e o mesmo limite de 60 chamadas por minuto da API. Com token só leitura, o assistente só vê as ferramentas de consulta.

Claude.ai e ChatGPT

Adicione um conector personalizado com o endereço acima (no Claude: Configurações → Conectores → Adicionar conector personalizado; no ChatGPT: Configurações → Conectores, no modo desenvolvedor). O assistente abre a tela de login do seu CRM: entre com seu usuário e clique em Autorizar. O que ele gravar fica no seu nome, e a conexão pode ser revogada em Configurações → API pública. O login segue o OAuth 2.1 com PKCE e cadastro automático do assistente, como pede a especificação do MCP.

Claude Code

claude mcp add --transport http x32crm https://SUA-EMPRESA.crm.x32.com.br/api/x32/mcp --header "token: SEU_TOKEN"

Claude Desktop

No arquivo claude_desktop_config.json (precisa do Node.js instalado):

{
  "mcpServers": {
    "x32crm": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://SUA-EMPRESA.crm.x32.com.br/api/x32/mcp", "--header", "token:SEU_TOKEN"]
    }
  }
}

Ferramentas

listar_funisLista os funis de vendas com as etapas (id, nome, código, probabilidade). Use antes de mudar etapa ou filtrar leads por funil/etapa.
listar_origensLista as origens de lead (site, WhatsApp, Google Ads...).
listar_tiposLista os tipos de lead.
listar_usuariosLista os usuários do CRM (vendedores), com id, nome, e-mail e se está ativo.
resumo_funilQuantidade de leads e soma dos valores em cada etapa de cada funil. Bom para visão geral das vendas.
listar_leadsLista leads, do mais novo para o mais antigo, com filtros.
ver_leadMostra um lead com o contato e os dados de rastreamento (UTM, gclid, fbclid).
criar_leadCria um lead e também o contato e a organização, se ainda não existirem (procura por e-mail, telefone e CNPJ). O responsável é escolhido em rodízio. (leitura e escrita)
atualizar_leadAltera só os campos enviados de um lead. (leitura e escrita)
mudar_etapa_leadMove o lead para outra etapa do funil dele. Use etapa_id ou o código da etapa (won = ganho, lost = perdido). (leitura e escrita)
adicionar_nota_leadInclui uma nota no histórico do lead. (leitura e escrita)
listar_contatosLista contatos (pessoas), com filtros.
ver_contatoMostra um contato.
criar_contatoCria um contato. Precisa de e-mail ou telefone; e-mail já cadastrado devolve o id existente. (leitura e escrita)
atualizar_contatoAltera só os campos enviados de um contato. (leitura e escrita)
listar_organizacoesLista organizações (empresas dos contatos).
ver_organizacaoMostra uma organização.
criar_organizacaoCria uma organização. CNPJ ou nome já cadastrado devolve o id existente. (leitura e escrita)
atualizar_organizacaoAltera só os campos enviados de uma organização. (leitura e escrita)
listar_atividadesLista atividades (ligações, reuniões, almoços e notas) da agenda.
ver_atividadeMostra uma atividade.
criar_atividadeCria uma atividade ligada a um lead e/ou contato. Ligação, reunião e almoço precisam de titulo e inicio; nota precisa de descricao. (leitura e escrita)
atualizar_atividadeAltera só os campos enviados (ex.: concluida = true para marcar como feita). (leitura e escrita)
listar_produtosLista produtos do cadastro.
ver_produtoMostra um produto.
criar_produtoCria um produto (ou atualiza, se já existir o mesmo SKU ou origem + externo_id). (leitura e escrita)
atualizar_produtoAltera só os campos enviados de um produto. (leitura e escrita)
listar_pedidosLista pedidos (loja virtual, ERP).
ver_pedidoMostra um pedido com os itens.
consultar_cnpjDados da empresa pelo CNPJ na base da Receita: razão social, fantasia, situação, abertura, CNAE, porte, endereço, telefones, e-mail e sócios.
consultar_cepEndereço do CEP.
consultar_ncmDescrição do NCM.
consultar_produto_eanProduto pelo código de barras (EAN): descrição, NCM, CEST e médias de custo e preço.