API de Contas Bancárias
Consulta de contas bancárias cadastradas (somente leitura).
Consulte as contas bancárias cadastradas no Bunto ERP. Este endpoint permite listar e consultar contas bancárias de forma somente leitura via API.
Base URL
Produção:
https://api-backend.bunto.com.br/v1/contas/
Autenticação
Todas as requisições exigem um Token de API no header Authorization:
Authorization: Bearer bnt_seu_token_aqui
Tokens são gerados em Integrações -> Tokens de API no painel do Bunto ERP. Escopo necessário: contas com a ação read.
Endpoints
Listar Contas Bancárias
GET /v1/contas/
Escopo necessário: contas: read
Retorna a lista paginada de contas bancárias da empresa. Por padrão, apenas contas ativas são retornadas.
Query Parameters
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
pagina | integer | 1 | Número da página |
por_pagina | integer | 25 | Registros por página (máximo: 100) |
busca | string | - | Busca por descrição ou código do banco |
incluir_inativos | boolean | false | true para incluir contas inativas na listagem |
ordenar | string | descricao | Campo de ordenação: descricao, banco_codigo |
direcao | string | asc | Direção da ordenação: asc ou desc |
Exemplo com cURL
bashcurl 'https://api-backend.bunto.com.br/v1/contas/?pagina=1&por_pagina=10&ordenar=descricao&direcao=asc' \ -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", } # Listar contas bancárias ativas ordenadas por descricao resposta = requests.get( f"{BASE_URL}/contas/", headers=headers, params={ "pagina": 1, "por_pagina": 25, "ordenar": "descricao", "direcao": "asc", }, ) dados = resposta.json() if dados["success"]: contas = dados["data"]["resultados"] paginacao = dados["data"]["paginacao"] print(f"Total de contas: {paginacao['total_registros']}") for conta in contas: print(f" - [{conta['banco_codigo']}] {conta['descricao']} | Ag: {conta['agencia']} Cc: {conta['conta']}") 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 params = new URLSearchParams({ pagina: "1", por_pagina: "25", ordenar: "descricao", direcao: "asc", }); const resposta = await fetch(`${BASE_URL}/contas/?${params}`, { headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", }, }); const dados = await resposta.json(); if (dados.success) { const contas = dados.data.resultados; const paginacao = dados.data.paginacao; console.log(`Total de contas: ${paginacao.total_registros}`); contas.forEach((conta) => { console.log(` - [${conta.banco_codigo}] ${conta.descricao} | Ag: ${conta.agencia} Cc: ${conta.conta}`); }); } else { console.error(`Erro: ${resposta.status}`); }
Resposta (200 OK)
json{ "success": true, "message": "3 registros encontrados", "data": { "resultados": [ { "id": 1, "banco_codigo": "001", "descricao":"Banco do Brasil - Conta Principal", "agencia": "1234", "conta": "56789-0", "ativo": true, "principal": true }, { "id": 2, "banco_codigo": "341", "descricao":"Itaú - Conta Secundária", "agencia": "0567", "conta": "12345-6", "ativo": true, "principal": false }, { "id": 3, "banco_codigo": "033", "descricao":"Santander - Recebimentos", "agencia": "0890", "conta": "01234567-8", "ativo": true, "principal": false } ], "paginacao": { "pagina_atual": 1, "total_paginas": 1, "total_registros": 3, "por_pagina": 25, "proxima": null, "anterior": null } } }
Campos da Listagem
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da conta bancária |
banco_codigo | string | Código do banco (ex: "001", "341", "033") |
descricao | string | Descrição da conta bancária |
agencia | string | Número da agência |
conta | string | Número da conta |
ativo | boolean | Se a conta está ativa |
principal | boolean | Se é a conta principal da empresa |
Obter Conta Bancária
GET /v1/contas/{id}/
Escopo necessário: contas: read
Retorna os dados completos de uma conta bancária específica, incluindo informações adicionais como dígitos da agência e conta, tipo de conta e dados do titular.
Exemplo com cURL
bashcurl https://api-backend.bunto.com.br/v1/contas/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", } conta_id = 1 resposta = requests.get(f"{BASE_URL}/contas/{conta_id}/", headers=headers) dados = resposta.json() if dados["success"]: conta = dados["data"] print(f"Conta: {conta['descricao']}") print(f"Banco: {conta['banco_codigo']}") print(f"Agência: {conta['agencia']}-{conta['agencia_digito'] or ''}") print(f"Conta: {conta['conta']}-{conta['conta_digito'] or ''}") print(f"Titular: {conta['titular']}") else: print(f"Erro: {dados}")
Exemplo com JavaScript
javascriptconst BASE_URL = "https://api-backend.bunto.com.br/v1"; const TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4"; const contaId = 1; const resposta = await fetch(`${BASE_URL}/contas/${contaId}/`, { headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", }, }); const dados = await resposta.json(); if (dados.success) { const conta = dados.data; console.log(`Conta: ${conta.descricao}`); console.log(`Banco: ${conta.banco_codigo}`); console.log(`Agência: ${conta.agencia}-${conta.agencia_digito ?? ""}`); console.log(`Conta: ${conta.conta}-${conta.conta_digito ?? ""}`); console.log(`Titular: ${conta.titular}`); } else { console.error(`Erro: ${JSON.stringify(dados)}`); }
Resposta (200 OK)
json{ "success": true, "message": "Registro encontrado", "data": { "id": 1, "banco_codigo": "001", "descricao":"Banco do Brasil - Conta Principal", "agencia": "1234", "conta": "56789-0", "ativo": true, "principal": true, "agencia_digito": "5", "conta_digito": "0", "tipo_conta": "corrente", "titular": "Empresa Exemplo LTDA", "documento_titular": "12.345.678/0001-90" } }
Campos do Detalhe (adicionais à listagem)
| Campo | Tipo | Descrição |
|---|---|---|
agencia_digito | string / null | Dígito verificador da agência |
conta_digito | string / null | Dígito verificador da conta |
tipo_conta | string / null | Tipo da conta (ex: "corrente", "poupança") |
titular | string / null | Nome do titular da conta |
documento_titular | string / null | CPF ou CNPJ do titular |
Erros Comuns
| Código | Erro | Causa | Solução |
|---|---|---|---|
| 401 | Token invalido | Token ausente, expirado, revogado ou mal formatado | Verifique se o header é Authorization: Bearer bnt_xxx |
| 403 | Token nao tem permissao | O token não possui o escopo contas ou a ação read | Verifique os escopos do token no painel |
| 404 | Nao encontrado | Conta não existe ou pertence a outra empresa | Confirme o ID e se a conta pertence à empresa do token |
| 429 | Limite de requisicoes excedido | Rate limit ultrapassado | Implemente retry com backoff exponencial |
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).
| Operação | Métodos HTTP | Limite |
|---|---|---|
| Leitura | GET, HEAD, OPTIONS | 120 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 práticas
- Use
por_pagina=100para reduzir o número de requisições ao listar contas - Implemente retry com backoff exponencial ao receber
429 - Armazene dados em cache local quando possível
Paginação
Todos os endpoints de listagem retornam dados paginados.
Parâmetros
| Parâmetro | Tipo | Padrão | Máximo | Descrição |
|---|---|---|---|---|
pagina | integer | 1 | - | Número da página |
por_pagina | integer | 25 | 100 | Registros por página |
Atenção: Os parâmetros são pagina e por_pagina (em português), não page e per_page.
Objeto paginacao na resposta
| Campo | Tipo | Descrição |
|---|---|---|
pagina_atual | integer | Número da página atual |
total_paginas | integer | Total de páginas disponíveis |
total_registros | integer | Total de registros encontrados |
por_pagina | integer | Registros por página |
proxima | string / null | URL da próxima página (null se for a última) |
anterior | string / null | URL da página anterior (null se for a primeira) |
Exemplo: percorrer todas as páginas (Python)
pythonimport requests BASE_URL = "https://api-backend.bunto.com.br/v1" TOKEN = "bnt_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v2W3x4" headers = {"Authorization": f"Bearer {TOKEN}"} todas_as_contas = [] url = f"{BASE_URL}/contas/?por_pagina=100" while url: resposta = requests.get(url, headers=headers) dados = resposta.json() if not dados["success"]: break todas_as_contas.extend(dados["data"]["resultados"]) url = dados["data"]["paginacao"]["proxima"] print(f"Total obtido: {len(todas_as_contas)} contas bancárias")