API de Empresas
Consulta e atualização dos dados da empresa via API.
Consulte e atualize os dados cadastrais da sua empresa via API. Este endpoint permite visualizar e editar informações como razao social, endereco, contato e inscricoes fiscais. Cada token de API acessa exclusivamente os dados da propria empresa vinculada.
Visao Geral
| Propriedade | Valor |
|---|---|
| Base URL (produção) | https://api-backend.bunto.com.br/v1/empresas/ |
| Autenticação | Authorization: Bearer bnt_xxx |
| Formato | JSON |
| Escopo necessário (leitura) | empresas: read |
| Escopo necessário (escrita) | empresas: write |
Endpoints
| Método | Endpoint | Descrição | Escopo |
|---|---|---|---|
| GET | /v1/empresas/ | Listar empresa (retorna apenas a propria) | empresas: read |
| GET | /v1/empresas/{id}/ | Detalhar empresa | empresas: read |
| PUT | /v1/empresas/{id}/ | Atualizar empresa (completo) | empresas: write |
| PATCH | /v1/empresas/{id}/ | Atualizar empresa (parcial) | empresas: write |
Importante: Este endpoint e restrito a propria empresa. A listagem retorna sempre um único registro (a empresa vinculada ao token). Não e possível consultar dados de outras empresas. A exclusão de empresa não e permitida via API.
Listar Empresa
GET /v1/empresas/
Escopo necessário: empresas: read
Retorna a lista contendo apenas a empresa vinculada ao token de autenticação. Diferente de outros endpoints, este sempre retorna exatamente um registro.
Exemplo com cURL
bashcurl https://api-backend.bunto.com.br/v1/empresas/ \ -H 'Authorization: Bearer bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4' \ -H 'Content-Type: application/json'
Exemplo com Python
pythonimport requests BASE_URL = "https://api-backend.bunto.com.br/v1" TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4" headers = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json", } # Consultar dados da empresa resposta = requests.get(f"{BASE_URL}/empresas/", headers=headers) dados = resposta.json() if dados["success"]: empresas = dados["data"]["resultados"] empresa = empresas[0] # Sempre retorna apenas uma empresa print(f"Empresa: {empresa['nome_empresa']}") print(f"CNPJ: {empresa['cnpj']}") print(f"Regime: {empresa['regime_tributario']}") else: print(f"Erro: {resposta.status_code}")
Exemplo com JavaScript
javascriptconst BASE_URL = "https://api-backend.bunto.com.br/v1"; const TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4"; const resposta = await fetch(`${BASE_URL}/empresas/`, { headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", }, }); const dados = await resposta.json(); if (dados.success) { const empresa = dados.data.resultados[0]; // Sempre retorna apenas uma empresa console.log(`Empresa: ${empresa.nome_empresa}`); console.log(`CNPJ: ${empresa.cnpj}`); console.log(`Regime: ${empresa.regime_tributario}`); } else { console.error(`Erro: ${resposta.status}`); }
Resposta (200 OK)
json{ "success": true, "message": "1 registros encontrados", "data": { "resultados": [ { "id": 1, "nome_empresa": "Bunto Comercio de Roupas Ltda", "cnpj": "12.345.678/0001-90", "nome_fantasia": "Bunto Moda", "tipo_pessoa": "J", "regime_tributario": 1, "ativo": true, "criado_em": "2025-06-15T10:00:00-03:00" } ], "paginacao": { "pagina_atual": 1, "total_paginas": 1, "total_registros": 1, "por_pagina": 25, "proxima": null, "anterior": null } } }
Campos da Listagem
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da empresa |
nome_empresa | string | Razao social da empresa |
cnpj | string / null | CNPJ da empresa (formatado) |
nome_fantasia | string / null | Nome fantasia |
tipo_pessoa | string / null | Tipo de pessoa: F (fisica) ou J (juridica) |
regime_tributario | integer | Regime tributario (1 = Simples Nacional, 2 = Lucro Presumido, 3 = Lucro Real) |
ativo | boolean | Se a empresa esta ativa |
criado_em | datetime | Data e hora de criação |
Obter Empresa
GET /v1/empresas/{id}/
Escopo necessário: empresas: read
Retorna os dados completos da empresa, incluindo endereco, contato, inscricoes fiscais e demais informações cadastrais.
Exemplo com cURL
bashcurl https://api-backend.bunto.com.br/v1/empresas/1/ \ -H 'Authorization: Bearer bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4' \ -H 'Content-Type: application/json'
Exemplo com Python
pythonimport requests BASE_URL = "https://api-backend.bunto.com.br/v1" TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4" headers = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json", } empresa_id = 1 resposta = requests.get(f"{BASE_URL}/empresas/{empresa_id}/", headers=headers) dados = resposta.json() if dados["success"]: empresa = dados["data"] print(f"Empresa: {empresa['nome_empresa']}") print(f"Fantasia: {empresa['nome_fantasia']}") print(f"CNPJ: {empresa['cnpj']}") print(f"Email: {empresa['email']}") print(f"Endereco: {empresa['endereco']}, {empresa['numero']} - {empresa['cidade']}/{empresa['uf']}") else: print(f"Erro: {dados}")
Exemplo com JavaScript
javascriptconst BASE_URL = "https://api-backend.bunto.com.br/v1"; const TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4"; const empresaId = 1; const resposta = await fetch(`${BASE_URL}/empresas/${empresaId}/`, { headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", }, }); const dados = await resposta.json(); if (dados.success) { const empresa = dados.data; console.log(`Empresa: ${empresa.nome_empresa}`); console.log(`Fantasia: ${empresa.nome_fantasia}`); console.log(`CNPJ: ${empresa.cnpj}`); console.log(`Email: ${empresa.email}`); console.log( `Endereco: ${empresa.endereco}, ${empresa.numero} - ${empresa.cidade}/${empresa.uf}` ); } else { console.error(`Erro: ${JSON.stringify(dados)}`); }
Resposta (200 OK)
json{ "success": true, "message": "Registro encontrado", "data": { "id": 1, "nome_empresa": "Bunto Comercio de Roupas Ltda", "cnpj": "12.345.678/0001-90", "nome_fantasia": "Bunto Moda", "tipo_pessoa": "J", "regime_tributario": 1, "ativo": true, "criado_em": "2025-06-15T10:00:00-03:00", "inscricao_estadual": "123.456.789.001", "inscricao_municipal": "987654", "atividade_principal": "4781-4/00 - Comercio varejista de artigos de vestuario e acessorios", "porte_empresa": "ME", "email": "contato@buntomoda.com.br", "telefone": "(11) 3456-7890", "celular": "(11) 99876-5432", "cep": "01310100", "uf": "SP", "cidade": "Sao Paulo", "bairro": "Bela Vista", "endereco": "Avenida Paulista", "numero":"1000", "complemento": "Sala 501", "site": "https://www.buntomoda.com.br", "atualizado_em": "2026-02-10T14:22:00-03:00" } }
Campos do Detalhe (adicionais a listagem)
| Campo | Tipo | Descrição |
|---|---|---|
inscricao_estadual | string / null | Inscricao estadual |
inscricao_municipal | string / null | Inscricao municipal |
atividade_principal | string / null | Atividade principal (CNAE) |
porte_empresa | string / null | Porte da empresa (ME, EPP, etc.) |
email | string / null | E-mail de contato |
telefone | string / null | Telefone fixo |
celular | string / null | Celular |
cep | string / null | CEP (8 digitos, sem formatacao) |
uf | string / null | Unidade federativa (2 caracteres) |
cidade | string / null | Cidade |
bairro | string / null | Bairro |
endereco | string / null | Logradouro (rua, avenida, etc.) |
numero | string / null | Número do endereco |
complemento | string / null | Complemento do endereco |
site | string / null | Site da empresa |
atualizado_em | datetime | Data e hora da última atualização |
Atualizar Empresa
PUT /v1/empresas/{id}/
PATCH /v1/empresas/{id}/
Escopo necessário: empresas: write
Atualiza os dados cadastrais da empresa. Use PUT para atualização completa ou PATCH para atualização parcial (apenas os campos enviados serão alterados).
Nota: Campos como cnpj, tipo_pessoa, regime_tributario e ativo não sao editaveis via API. Para alterar esses dados, acesse o painel administrativo do Bunto ERP.
Campos do Request Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nome_empresa | string | Não | Razao social (máximo 255 caracteres) |
nome_fantasia | string | Não | Nome fantasia (máximo 255 caracteres) |
email | string | Não | E-mail de contato (máximo 100 caracteres) |
telefone | string | Não | Telefone fixo (máximo 20 caracteres) |
celular | string | Não | Celular (máximo 20 caracteres) |
cep | string | Não | CEP (máximo 8 caracteres, sem formatacao) |
uf | string | Não | Unidade federativa (máximo 2 caracteres) |
cidade | string | Não | Cidade (máximo 100 caracteres) |
bairro | string | Não | Bairro (máximo 100 caracteres) |
endereco | string | Não | Logradouro (máximo 255 caracteres) |
numero | string | Não | Número do endereco (máximo 10 caracteres) |
complemento | string | Não | Complemento (máximo 100 caracteres) |
site | string | Não | Site da empresa (máximo 100 caracteres) |
inscricao_estadual | string | Não | Inscricao estadual (máximo 20 caracteres) |
inscricao_municipal | string | Não | Inscricao municipal (máximo 20 caracteres) |
Exemplo com cURL (PATCH - atualização parcial)
bashcurl -X PATCH https://api-backend.bunto.com.br/v1/empresas/1/ \ -H 'Authorization: Bearer bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4' \ -H 'Content-Type: application/json' \ -d '{ "email": "novo-contato@buntomoda.com.br", "celular": "(11) 91234-5678", "site": "https://www.buntomoda.com.br" }'
Exemplo com Python
pythonimport requests BASE_URL = "https://api-backend.bunto.com.br/v1" TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4" headers = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json", } empresa_id = 1 # Atualizacao parcial (PATCH) - apenas os campos que mudaram atualizacao = { "email": "novo-contato@buntomoda.com.br", "celular": "(11) 91234-5678", "site": "https://www.buntomoda.com.br", } resposta = requests.patch( f"{BASE_URL}/empresas/{empresa_id}/", headers=headers, json=atualizacao, ) dados = resposta.json() if dados["success"]: empresa = dados["data"] print(f"Empresa atualizada! Email: {empresa['email']}") print(f"Celular: {empresa['celular']}") else: print(f"Erro ao atualizar: {dados}")
Exemplo com JavaScript
javascriptconst BASE_URL = "https://api-backend.bunto.com.br/v1"; const TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4"; const empresaId = 1; const atualizacao = { email: "novo-contato@buntomoda.com.br", celular: "(11) 91234-5678", site: "https://www.buntomoda.com.br", }; const resposta = await fetch(`${BASE_URL}/empresas/${empresaId}/`, { method: "PATCH", headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", }, body: JSON.stringify(atualizacao), }); const dados = await resposta.json(); if (dados.success) { console.log(`Empresa atualizada! Email: ${dados.data.email}`); console.log(`Celular: ${dados.data.celular}`); } else { console.error(`Erro ao atualizar:`, dados); }
Resposta (200 OK)
json{ "success": true, "message": "Empresa atualizada com sucesso", "data": { "id": 1, "nome_empresa": "Bunto Comercio de Roupas Ltda", "cnpj": "12.345.678/0001-90", "nome_fantasia": "Bunto Moda", "tipo_pessoa": "J", "regime_tributario": 1, "ativo": true, "criado_em": "2025-06-15T10:00:00-03:00", "inscricao_estadual": "123.456.789.001", "inscricao_municipal": "987654", "atividade_principal": "4781-4/00 - Comercio varejista de artigos de vestuario e acessorios", "porte_empresa": "ME", "email": "novo-contato@buntomoda.com.br", "telefone": "(11) 3456-7890", "celular": "(11) 91234-5678", "cep": "01310100", "uf": "SP", "cidade": "Sao Paulo", "bairro": "Bela Vista", "endereco": "Avenida Paulista", "numero":"1000", "complemento": "Sala 501", "site": "https://www.buntomoda.com.br", "atualizado_em": "2026-02-12T16:45:00-03:00" } }
Erros Comuns
| Código | Erro | Causa | Solucao |
|---|---|---|---|
| 400 | VALIDATION_ERROR | Dados enviados sao invalidos (campo com formato incorreto, tamanho excedido, etc.) | Verifique os tipos de dados e limites de tamanho |
| 401 | Token invalido | Token ausente, expirado, revogado ou mal formatado | Verifique se o header e Authorization: Bearer bnt_xxx |
| 403 | Token nao tem permissao | O token não possui o escopo empresas ou a ação necessária (read, write) | Verifique os escopos do token no painel |
| 404 | Nao encontrado | ID informado não corresponde a empresa do token | Use o ID da propria empresa (obtido via listagem) |
| 429 | Limite de requisicoes excedido | Rate limit ultrapassado para o tipo de operação | Implemente retry com backoff exponencial |
Exemplo de Resposta de Erro (400)
json{ "success": false, "error": { "code": "VALIDATION_ERROR", "message": "Erro de validacao", "details": { "uf": ["Certifique-se de que este campo nao tenha mais de 2 caracteres."], "cep": ["Certifique-se de que este campo nao tenha mais de 8 caracteres."] } } }
Exemplo de Resposta de Erro (403)
json{ "detail": "Token nao tem permissao para este recurso" }
Rate Limiting
A API aplica limites de requisição por token (não por IP). Cada tipo de operação tem um limite diferente.
| Operação | Métodos HTTP | Limite |
|---|---|---|
| Leitura | GET, HEAD, OPTIONS | 120 requisições/minuto |
| Escrita | POST, PUT, PATCH | 30 requisições/minuto |
| Exclusão | DELETE | 10 requisições/minuto |
Ao exceder o limite, a API retorna 429 Too Many Requests:
json{ "detail": "Limite de requisicoes excedido. Tente novamente em 45 segundos." }
Boas praticas
- Armazene os dados da empresa em cache local, pois raramente mudam
- Use
PATCHcom apenas os campos alterados ao inves dePUTcom todos os dados - Implemente retry com backoff exponencial ao receber
429
Valores de Referencia
Regime Tributario
| Valor | Descrição |
|---|---|
1 | Simples Nacional |
2 | Lucro Presumido |
3 | Lucro Real |
Tipo de Pessoa
| Valor | Descrição |
|---|---|
F | Pessoa Fisica |
J | Pessoa Juridica |
Porte da Empresa
| Valor | Descrição |
|---|---|
ME | Microempresa |
EPP | Empresa de Pequeno Porte |
DEMAIS | Demais |