Changelog - API v1
Histórico de mudanças e lançamentos da API pública do Bunto ERP.
Histórico de mudanças da API pública do Bunto ERP.
v1.6.0 - 7 de agosto de 2026
Quem tem várias empresas na mesma conta passa a abrir empresa e emitir chave pela API.
Empresas
POST /v1/empresas/abre uma empresa nova na mesma conta. Ela nasce com o pacote de recursos e uma cópia dos perfis de acesso do cadastro principal — não é preciso remontar permissão a permissão. Enviandogerar_chave: true, a chave de API da empresa nova volta na própria resposta.POST /v1/empresas/{id}/chaves/emite chave para qualquer empresa ou filial da conta. O texto da chave aparece uma única vez, na resposta.GET /v1/empresas/limite/informa quantas empresas a conta já usa e quantas ainda cabem no contrato. Consulte antes de abrir.GET /v1/empresas/escopos/lista as permissões que uma chave pode receber, já filtradas pelo plano da empresa. Pedir um módulo fora do plano na emissão é recusado com400em vez de aceito em silêncio — uma chave com permissão inexercível só produziria um403inexplicável depois.- A emissão aceita
escoposeips_permitidos: a chave nasce limitada aos módulos e ações que a integração usa, em vez de acesso total. Quem emite não concede o que não tem — chave restrita não gera chave mais ampla que ela. GET /v1/empresas/da-conta/lista tudo que a conta administra — empresas e filiais — comocupa_limiteseparando quem consome vaga de quem não consome (filial divide o CNPJ raiz da matriz).- Só a chave do cadastro principal comanda. A chave de uma empresa criada por esse caminho lê e edita apenas a si mesma; se tentar abrir outra empresa ou emitir chave, recebe
403. - O contrato passa a valer de verdade. Alcançado o total de empresas contratado, a abertura responde
400com a mensagem pronta para exibir. O mesmo teto agora vale na tela.
Usuários
- O total de usuários contratado passou a ser aplicado em
POST /v1/usuarios/e na reativação de um acesso excluído (PATCHcomis_active: true). Alcançado o limite, a resposta é400. Contador e terceiro são acessos externos e não ocupam vaga.
Tokens de API no painel
- Quem responde pela conta passa a ver e gerar chaves de qualquer empresa dela na mesma tela, sem trocar de empresa. Cada chave mostra a que empresa pertence.
- A geração passou a permitir limitar o que a chave acessa, módulo a módulo. O padrão continua acesso total — chave de API costuma servir à integração da própria empresa —, mas quem precisa de uma chave restrita não depende mais de gerá-la pela API. A lista oferecida é a mesma que a verificação usa: o que o plano da empresa libera.
- Escopo de chave não é editável depois de criada: para mudar o alcance, gere outra e revogue a anterior. Só a restrição por IP continua ajustável.
Escopos
- Dois escopos novos no módulo
empresas:criar_empresaegerar_chave. Eles não vêm junto dowrite— precisam ser marcados um a um na criação do aplicativo, porque abrir empresa mexe no que a conta paga e emitir chave dá acesso total aos dados daquela empresa. Nenhum token existente perdeu acesso a algo que já tinha.
v1.5.0 - 7 de agosto de 2026
A Atendente IA passa a responder com o material da sua empresa, e você alimenta essa base pela API.
CRM — Conhecimento da IA
GET /v1/crm/conhecimento/lista o material publicado;POSTpublica por arquivo (PDF, Word, texto, Markdown) ou por texto direto. O envio entra numa fila: a resposta volta comsituacao: "na_fila"e você consulta depois o resultado.- Reenviar o mesmo conteúdo não duplica. Texto idêntico ao de um material já publicado devolve
200com o item existente, o que torna seguro rodar a sincronização quantas vezes quiser. PATCH /v1/crm/conhecimento/{id}/liga, desliga, renomeia ou manda processar de novo.DELETEremove o registro, os trechos indexados e o arquivo.GET /v1/crm/conhecimento/testar/?termo=...devolve exatamente os trechos que a atendente receberia para aquela pergunta — dá para conferir se o material responde antes do cliente perguntar.- PDF digitalizado é recusado, com o motivo em
erro. Sem texto dentro do arquivo, a atendente nunca conseguiria usar o material; recusar é mais honesto que aceitar. - Limites: 10 MB e 200 páginas por arquivo. Material maior deve ser dividido.
- O conteúdo é isolado por empresa: não entra na base pública, não é indexado e nenhuma outra empresa enxerga.
Nomenclatura
- A "Vendedora IA" passou a se chamar Atendente IA em toda a interface e na documentação. Nenhum campo ou rota mudou de nome.
v1.4.1 - 25 de julho de 2026
Rotação do refresh token: integração ativa deixa de cair sozinha, e token copiado é detectado.
OAuth 2.0
- O
refresh_tokenagora é rotacionado. Cada renovação devolve um refresh novo e invalida o anterior. A resposta degrant_type=refresh_tokenpassou a incluir os camposrefresh_tokenerefresh_expires_in. - Janela deslizante: o prazo de 30 dias passa a contar da última renovação, não da autorização original. Antes, um aplicativo que renovava todos os dias mesmo assim perdia o acesso no trigésimo dia e obrigava o usuário a autorizar de novo.
- Detecção de reuso: apresentar um refresh que já foi trocado devolve
invalid_grante encerra a sessão inteira. Um token usado duas vezes indica cópia — ou que o cliente perdeu a resposta de uma renovação. Nos dois casos, a reautorização é o caminho seguro. - O que muda para quem integra: guarde o
refresh_tokennovo a cada renovação, em armazenamento durável, antes de dar a renovação por concluída. Não renove em paralelo a partir de duas instâncias com o mesmo token. Os exemplos em Python e JavaScript do guia de OAuth foram atualizados com a persistência.
v1.4.0 - 25 de julho de 2026
O inbox do CRM passa a funcionar nos dois sentidos: abrir conversa, responder, enviar anexo e recuperar o que passou.
CRM — conversas e mensagens
POST /v1/crm/conversas/abre conversa por e-mail, SMS ou WhatsApp não oficial. Idempotente por canal: devolve a conversa já aberta em vez de duplicar o histórico.POST /v1/crm/mensagens/envia texto pelo canal da conversa;POST /v1/crm/mensagens/anexo/envia imagem, documento, áudio ou vídeo (multipart). Mensagens enviadas por integração ficam comremetente_tipo: "integracao".- Cursor de recuperação:
GET /v1/crm/mensagens/?apos_id={id}e?desde={ISO}percorrem a empresa inteira, para reconciliar o que se perdeu enquanto o seu sistema esteve fora do ar. Do lado das conversas,?atualizadas_desde={ISO}. Sem nenhum recorte, a listagem devolve vazio de propósito. - Arquivar e desarquivar conversa (
/arquivar/,/desarquivar/): sai do inbox sem apagar nada, e mensagem nova do contato traz de volta sozinha. Não existe rota para excluir conversa. - Marcar como lida, pausar e retomar a Atendente IA na conversa, e registrar anotação interna.
- A resposta de mensagem passou a trazer os mesmos campos que o webhook entrega:
canal,contato_id,midia,resposta_a_id,mensagem_id_externo,entregue,enviada_em,entregue_em,lida_em. Adição de campos, sem quebra.
CRM — canais, modelos e contatos
GET /v1/crm/canais/diz por onde a empresa pode falar e o que cada canal permite (pode_iniciar_texto_livre,exige_modelo_aprovado).GET /v1/crm/whatsapp/modelos/lista os modelos aprovados;POST /v1/crm/whatsapp/modelos/{id}/enviar/dispara um deles — o único caminho para puxar assunto no WhatsApp oficial.POST /v1/crm/contatos/casar/descobre a qual contato pertence um telefone ou e-mail, devolvendo apenas o identificador.
Escopos
- Novo escopo
crm: whatsapp_modelo, exigido para disparar modelo de WhatsApp. Ele não vem junto dowrite: o disparo consome saldo na plataforma e afeta a reputação do número, então precisa ser liberado de propósito no token. Nenhum token existente perdeu acesso — a rota é nova.
Webhooks
- Cinco eventos novos:
conversa.atribuida,conversa.aguardando_atendente,mensagem.entregue,mensagem.lidaemensagem.falhou. Os três de mensagem hoje valem para o WhatsApp. - Payload mais completo (adição de campos, sem quebra): os eventos de conversa e mensagem passam a trazer o contato identificado, o
canal, a mídia, oresposta_a_ide omensagem_id_externoda plataforma de origem. Antes era preciso fazer duas chamadas de volta só para saber de quem era a mensagem. conversa.atualizadamudou de significado: agora indica mudança de estado (situação, dono, arquivamento). Alteração que só mexe em carimbo de hora não gera mais evento — isso dobrava o volume entregue sem informação nova. Para acompanhar tráfego, usemensagem.recebidaemensagem.enviada.- Correção:
mensagem.recebidanão disparava nas mensagens que entravam pelo chat do site, Telegram, formulário e e-mail. Agora vale para todos os canais.
v1.3.0 - 26 de junho de 2026
API de CRM ampliada, novos eventos de webhook e renomeação dos headers de webhook.
CRM
- Novos recursos na API de CRM: contatos (com mascaramento de dados pessoais na leitura — LGPD), atividades, itens de negócio, conversas e mensagens, etiquetas, funis e motivos de perda
- Ações de negócio:
mover-etapa,ganhareperder(mudança de estado leve, desacoplada do ERP) - 14 eventos de webhook do CRM:
contato.criado/atualizado/arquivado/etiqueta_alterada,negocio.criado/atualizado/etapa_alterada/ganho/perdido,conversa.criada/atualizada/concluida,mensagem.recebida/enviada
Webhooks
- Breaking: os headers de entrega foram renomeados de
X-Bunto-*paraX-Webhook-*(X-Webhook-Signature,X-Webhook-Evento,X-Webhook-Id,X-Webhook-Timestamp,X-Webhook-Idempotency-Key). Atualize a verificação da assinatura do seu endpoint para lerX-Webhook-Signature.
v1.2.0 - 13 de fevereiro de 2026
OAuth 2.0 Authorization Code para integrações de terceiros.
OAuth 2.0
- Fluxo completo OAuth 2.0 Authorization Code Grant (RFC 6749)
- Registro de aplicativos com
client_ideclient_secret(prefixosbnt_app_ebnt_secret_) - Tela de consentimento para o usuário autorizar acesso granular
- Endpoint de autorização:
GET /integracoes/oauth/authorize/ - Endpoint de token:
POST /integracoes/oauth/token/ - Endpoint de revogação:
POST /integracoes/oauth/revoke/(RFC 7009) - Access tokens OAuth (
bnt_oat_) com validade de 4 horas - Refresh tokens (
bnt_ort_) com validade de 30 dias - Escopos granulares por módulo e ação (
produtos:read,vendas:write, etc.) - Tokens criptografados com Fernet (nunca armazenados em texto puro)
- Código de autorização de uso único com expiração de 10 minutos
- Proteção CSRF via parâmetro
state - Validação exata de
redirect_uri(sem wildcards) - Comparação constant-time com
hmac.compare_digest - Limite de 5 aplicativos por empresa e 5 redirect URIs por aplicativo
- Documentação completa com exemplos em Python, JavaScript, PHP, Java, C# e Go
Remoções
- Removido endpoint
/v1/chat-ia/por questões de conformidade LGPD (mensagens do chat podem conter dados sensíveis)
v1.1.0 - 13 de fevereiro de 2026
Webhooks em tempo real para todos os módulos principais.
Webhooks
- Sistema completo de webhooks com notificações via HTTP POST
- 12 eventos disponíveis: produto, cliente, venda, estoque e NF-e
- Assinatura HMAC-SHA256 em cada requisição (header
X-Bunto-Signature, renomeado paraX-Webhook-Signaturena v1.3.0) - Backoff exponencial com até 10 tentativas configuráveis
- Headers de idempotência para evitar processamento duplicado
- Conformidade LGPD: dados sensíveis de clientes (CPF/CNPJ, e-mail, telefone) mascarados automaticamente
- Validação SSRF: bloqueio de IPs privados, localhost e metadata endpoints
- Funciona para operações via painel do ERP e via API externa
- Documentação completa com exemplos em Python, JavaScript, PHP, Java, C# e Go
- Retenção de logs de entrega: 30 dias (limpeza automática diária)
Eventos disponíveis
| Evento | Descrição |
|---|---|
produto.criado | Novo produto cadastrado |
produto.atualizado | Dados do produto alterados |
produto.excluido | Produto removido |
cliente.criado | Novo cliente cadastrado |
cliente.atualizado | Dados do cliente alterados |
cliente.excluido | Cliente removido |
venda.criada | Nova venda/pedido registrado |
venda.atualizada | Dados da venda alterados |
venda.cancelada | Venda cancelada |
estoque.atualizado | Movimentação de estoque |
nfe.emitida | NF-e autorizada pela SEFAZ |
nfe.cancelada | NF-e cancelada |
Auditoria
- Criação, revogação e exclusão de tokens API auditadas automaticamente
- Criação e exclusão de webhooks auditadas
- Criação, desativação e exclusão de aplicativos OAuth auditadas
- Integração com módulo de Ocorrências (IP e User Agent registrados)
v1.0.0 - 13 de fevereiro de 2026
Lançamento inicial da API pública do Bunto ERP.
Novos Endpoints (33 total)
E-commerce e Catálogo
GET/POST/PUT/PATCH/DELETE /v1/produtos/- CRUD completo de produtosGET/POST/PUT/PATCH/DELETE /v1/categorias/- Gerenciar categorias de produtosGET/POST/PUT/PATCH/DELETE /v1/marcadores/- Tags coloridas para organizaçãoGET/POST/PUT/PATCH/DELETE /v1/embalagens/- Cadastro de embalagens personalizadasGET/POST/PUT/PATCH/DELETE /v1/servicos/- CRUD de serviços prestados
Vendas e Estoque
GET/POST/PUT/PATCH/DELETE /v1/vendas/- Pedidos de venda com itensGET/POST /v1/estoque/- Consulta e lançamentos de movimentaçãoGET/POST/PUT/PATCH/DELETE /v1/pdv/- Vendas do ponto de vendaGET/POST/PUT/PATCH/DELETE /v1/propostas/- Orçamentos e propostas comerciaisGET/POST/PUT/PATCH/DELETE /v1/devolucoes/- Devoluções de mercadoriasGET/POST/PUT/PATCH/DELETE /v1/vale-troca/- Vales de troca emitidos
Clientes e CRM
GET/POST/PUT/PATCH/DELETE /v1/clientes/- Cadastros com conformidade LGPDGET/POST/PUT/PATCH/DELETE /v1/crm/- Oportunidades e pipeline de vendas
Finanças
GET/POST/PUT/PATCH/DELETE /v1/financas/- Contas a pagar e receberGET /v1/contas/- Contas bancárias (somente leitura)GET/POST/PUT/PATCH/DELETE /v1/cobrancas-bancarias/- Boletos e cobrançasGET/POST/PUT/PATCH/DELETE /v1/naturezas/- Naturezas de receita/despesa
Compras e Fiscal
GET/POST/PUT/PATCH/DELETE /v1/compras/- Pedidos de compra com itensGET /v1/nf/- Notas fiscais NFe/NFCe (somente leitura)GET /v1/nfse/- Notas fiscais de serviço (somente leitura)GET/POST/PUT/PATCH/DELETE /v1/regras-tributarias/- Regras de tributaçãoGET/POST/PUT/PATCH/DELETE /v1/distribuicao-dfe/- Distribuição de DF-e
Logística
GET/POST/PUT/PATCH/DELETE /v1/logistica/- Formas de envioGET/POST/PUT/PATCH/DELETE /v1/expedicao/- Agrupamentos de expedição
Marketing e Operacional
GET/POST/PUT/PATCH/DELETE /v1/marketing/- Conversões offline (Google/Meta Ads)GET/POST/PUT/PATCH/DELETE /v1/ocorrencias/- Registros de ocorrênciasGET/POST/PUT/PATCH/DELETE /v1/agenda/- Compromissos e tarefas
Sistema
GET/POST/PUT/PATCH/DELETE /v1/arquivos/- Upload e gerenciamento de arquivosGET/PUT/PATCH /v1/configuracoes/- Configurações da empresaGET/POST/PUT/PATCH/DELETE /v1/usuarios/- Gerenciar usuáriosGET/PUT/PATCH /v1/empresas/- Dados da empresa (atualização apenas)GET /v1/dashboard/- Estatísticas e indicadores
Autenticação e Segurança
- Autenticação via Bearer Token (
Authorization: Bearer bnt_xxx...) - Tokens com prefixo
bnt_identificam APIs do Bunto ERP - Sistema de escopos granulares:
read,write,deletepor módulo - Multi-tenancy com isolamento total por empresa
- Rate limiting inteligente:
- 120 requisições/min para leitura (GET)
- 30 requisições/min para escrita (POST/PUT/PATCH)
- 10 requisições/min para exclusão (DELETE)
- Headers informativos:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset
Formato de Respostas
Todas as respostas seguem envelope padronizado:
Sucesso (listagem):
json{ "success": true, "message": "42 registros encontrados", "data": { "resultados": [...], "paginacao": { "pagina_atual": 1, "total_paginas": 5, "total_registros": 42, "por_pagina": 10, "proxima": "https://...", "anterior": null } } }
Sucesso (criação/atualização):
json{ "success": true, "message": "Produto criado com sucesso", "data": { ... } }
Erro:
json{ "success": false, "message": "Este campo é obrigatório.", "errors": { "nome": ["Este campo é obrigatório."], "preco": ["Informe um número válido."] } }
Recursos da API
- Paginação automática: Query params
?pagina=1&por_pagina=25(máx: 100) - Busca: Filtro
?busca=termoem endpoints de listagem - Ordenação:
?ordenar=campo&direcao=asc|desc - Filtros contextuais: Por status, tipo, período, categoria, etc.
- Soft delete: Maioria dos endpoints usa exclusão lógica
- LGPD: Campos sensíveis de clientes são criptografados
- Respostas consistentes: Mesmo formato em todos os endpoints
Documentação
- Guia de Início Rápido com exemplos em curl, Python e JavaScript
- 33 endpoints documentados com exemplos reais
- Códigos de erro e troubleshooting
- Classes prontas:
BuntoAPI(Python) eBuntoClient(JavaScript)
Base URLs
- Produção:
https://api-backend.bunto.com.br/v1/ - Staging:
https://api-staging.bunto.com.br/v1/
Casos de Uso
Esta versão inicial suporta:
- Integração com e-commerces (Wix, VTEX, Shopify, ML, etc.)
- Sincronização bidirecional de produtos e estoque
- Importação de pedidos de marketplaces
- Conversões offline para Google Ads e Meta Ads
- Dashboards externos consumindo dados do ERP
- Automações via Zapier, Make, n8n
- Apps mobile personalizados
- Relatórios e BI externos
Próximas Versões
Planejado para v1.2 (Q2 2026):
- Suporte a uploads multipart/form-data
- Expansão de endpoints fiscais (emissão de NF-e)
- Filtros avançados com operadores (gt, lt, in, contains)
Feedback e sugestões: developers@bunto.com.br