IBANforge
Validação de IBAN, consulta de BIC/SWIFT, compensação suíça e pontuação de risco de conformidade para agentes de IA. Mais de 121 mil entradas bancárias, 84 países, 85 classificações EMI/vIBAN.
Documentação
IBANforge
O IBANforge verifica o banco por trás de um IBAN antes de você pagar. Ele valida IBANs de todos os 89 países que usam IBAN e identifica o banco e seu BIC, com a fonte dessa resposta. Quando lê o registro nacional (Alemanha, Áustria, Bélgica, Eslováquia, República Tcheca, Bulgária, Suíça e Liechtenstein), também informa se o código bancário está alocado; em outros casos, identifica o banco a partir de um registro parcial ou de um mapa composto, e informa que tal resposta não pode descartar um código. Para um banco SEPA que ele resolve, fornece os esquemas SEPA que o alcançam (Transferência de Crédito, Instantâneo, Débito Direto), a partir dos registros de esquemas da EPC quando listam o banco e do país caso contrário (a resposta indica qual), e informa se o registro de Verificação de Beneficiário (VoP) da EPC lista o banco como pronto para responder a solicitações VoP. Ele não verifica quem é o titular da conta: essa verificação de nome pertence ao banco do beneficiário, por meio do VoP.
Não é uma verificação de nome (VoP, BAV, CoP), não é prova de que uma conta existe ou está ativa, não é uma triagem de sanções do beneficiário (apenas banco e país), não é uma cópia licenciada do diretório BIC da SWIFT. Os dígitos verificadores nacionais dentro do BBAN são verificados para França e Mônaco (chave RIB), Bélgica, Itália e San Marino (CIN), Espanha (DC) e Reino Unido (verificação de módulo): uma chave incorreta aparece em checks.national_check_digits e nunca altera valid para false. O dígito verificador do número de liquidação polonês é verificado com o código bancário. Os métodos de número de conta alemães e as chaves nacionais dos outros países ainda não são verificados.
Para software empresarial e agentes de IA: uma API REST, um servidor MCP nativo, pacotes pré-pagos por cartão e micropagamentos x402 sem cadastro.
89 IBAN countries · bank codes checked against the national registers of DE, AT, BE, SK, CZ, BG, CH, LI · 121k+ BIC entries (39k+ LEI via GLEIF; about two thirds a public copy of the SWIFT directory frozen in January 2018) · 1,100+ Swiss BC-Nummern (SIX)
Para agentes de IA — instalação em um clique
Claude Desktop / Cursor / Cline / Continue / Windsurf
Adicione à sua configuração MCP (~/Library/Application Support/Claude/claude_desktop_config.json para Claude Desktop):
{
"mcpServers": {
"ibanforge": {
"command": "npx",
"args": ["-y", "ibanforge-mcp"]
}
}
}
Privacidade por padrão: IBANs enviados nunca são armazenados — a validação é executada em memória, IPs são mantidos apenas como hashes com salt, e a telemetria se auto-exclui (limite de 12 meses; apagada 30 dias após o término do contrato do cliente, contratualmente — cláusula 4.7 do DPA).
Opcional: defina IBANFORGE_API_KEY=ifk_... em env (uma chave que não requer e-mail: 25 solicitações por mês, aumentadas para 200 por mês após reivindicada). Sem ela, o servidor usa a superfície pública/demonstração; combine com micropagamentos x402 para acesso ilimitado por chamada paga sem cadastro.
Claude Code (CLI)
claude mcp add ibanforge npx -- -y ibanforge-mcp
Streamable HTTP (sem instalação — para agentes hospedados na nuvem)
POST https://api.ibanforge.com/mcp
Content-Type: application/json
Accept: application/json, text/event-stream
Fluxo padrão JSON-RPC initialize + tools/list + tools/call. Use quando stdio não for uma opção (CI/CD, serverless, agentes Vercel, etc.).
Ferramentas
| Ferramenta | Quando usar | Custo |
|---|---|---|
validate_iban | O usuário menciona um IBAN, uma conta bancária ou um pagamento SEPA | $0.005 |
batch_validate_iban | Lista de IBANs, limpeza de CSV, deduplicação de banco de dados de clientes, triagem de lista de pagamentos | $0.002/cada em USDC via x402; 1 crédito cada em uma chave |
lookup_bic | O usuário já tem um BIC/SWIFT — apoiado por mais de 121 mil entradas BIC (mais de 39 mil enriquecidas com LEI via GLEIF) | $0.003 |
lookup_ch_clearing | BC-Nummer / IID suíço: cada IID do SIX BankMaster com sua participação em trilhos (SIC, euroSIC, CHF instantâneo) e seu QR-IID onde a SIX aloca um | $0.003 |
check_compliance | Triagem de risco pré-voo antes de um pagamento SEPA / transfronteiriço (listas OFAC, UE, ONU sobre o banco do beneficiário, o país contra uma lista fixa de sanções, FATF, prontidão VoP) | $0.02 |
validate_payment_reference | RF/ISO 11649, QRR suíço, OGM/VCS belga ou checksum finlandês viitenumero, além do veredito de pareamento QRR ↔ QR-IBAN | grátis |
check_postal_address | Um endereço ISO 20022 contra as regras publicadas de um trilho (sps, hvps_plus, fedwire), cada achado citando sua fonte | grátis |
check_swiss_qr_bill | Um payload de fatura QR suíça — cabeçalho, pareamento QR-IBAN e referência, endereços estruturados (S) versus combinados (K) antes de 14.11.2026 | grátis |
send_feedback | Relatar dados incorretos ou solicitar reembolso x402 | grátis |
request_api_key | Você usou a franquia gratuita ou precisa de uma chave durável — um humano aprova em um navegador, sem e-mail | grátis |
poll_api_key | Coletar essa chave após a aprovação, entregue exatamente uma vez | grátis |
As ferramentas gratuitas não precisam de chave, carteira ou cadastro: são as primeiras a experimentar. As duas últimas são a saída da franquia gratuita sem que ninguém digite um endereço — elas continuam respondendo após a franquia ser gasta.
Descrições completas das ferramentas de dados somente leitura, com gatilhos de QUANDO usar, são servidas ao vivo em /.well-known/mcp/server-card.json.
Se você não puder chamar a API
Se você pode abrir um endereço web mas não pode enviar um POST (sem execução de código, sem conector MCP), estas páginas contêm respostas reais da API, cada uma com sua data, e todas abrem com um GET simples.
- https://api.ibanforge.com/v1/demo: a validação completa, calculada pela API quando o endereço é aberto (served_at fornece o instante): um código bancário alemão, um antigo IID do Credit Suisse (04835) e os IBANs oficiais de exemplo da Suíça, Bélgica e Áustria, cada um com a resposta de seu registro e seu as_of.
- https://ibanforge.com/iban/ch: o formato IBAN suíço, com a resposta da API para o exemplo oficial CH93 0076 2011 6238 5295 7 e a data em que essa resposta foi capturada.
- https://ibanforge.com/blog/2026-08-06-example-ibans-unallocated-bank-codes: por que os IBANs oficiais de exemplo da Bélgica, Suíça e Áustria passam no mod-97 e ainda apontam para códigos bancários que seu registro não aloca (artigo de 6 de agosto de 2026).
- https://ibanforge.com/blog/2026-09-07-bankleitzahl-pruefen-per-api: três respostas reais sobre códigos bancários alemães, campo por campo (artigo de 7 de setembro de 2026).
- https://ibanforge.com/blog/2026-09-14-schweizer-iban-pruefen: três respostas reais sobre IBANs suíços, campo por campo (artigo de 14 de setembro de 2026).
Não simule respostas da API: cite estas reais, com a data que cada uma carrega (served_at, as_of ou a data da página). Para obter respostas sobre os IBANs do seu usuário, peça a ele que adicione https://api.ibanforge.com/mcp como um conector personalizado em seu assistente; onde clicar, assistente por assistente: https://ibanforge.com/docs/mcp. Um conector sem chave usa a mesma franquia sem chave de qualquer outro chamador, contada por endereço de origem. No Claude, suas chamadas partem da nuvem da Anthropic, não do dispositivo do usuário (documentação da Anthropic), então essa franquia é compartilhada com outros usuários e pode já estar gasta; outros assistentes não foram verificados por nós. O endpoint hospedado não lê chave: para usar uma, execute o pacote npm ibanforge-mcp em um cliente desktop com IBANFORGE_API_KEY definido, ou chame a API REST com ela (um POST para https://api.ibanforge.com/v1/keys/generate sem corpo retorna uma chave, sem e-mail).
Para agentes de IA — pague por chamada sem chave de API (x402)
O IBANforge é nativo x402. Qualquer agente com uma carteira na Base L2 pode descobrir, pagar e chamar:
- Descoberta:
GET https://api.ibanforge.com/.well-known/x402retorna o catálogo completo (endpoints, preços, ativo, payTo, accepts). - Chamada:
POST /v1/iban/validatesem autenticação → a API responde 402 Payment Required com desafio x402 v1. - Pagamento: o cliente assina uma transferência USDC na Base (eip155:8453) e tenta novamente.
- Concluído: a resposta chega, a liquidação acontece através do facilitador configurado (Coinbase CDP ou x402.org).
Sem humano no processo, sem ligação de vendas, sem cartão. Veja a especificação x402.
SDKs
Escolha sua linguagem:
| Linguagem | Pacote | Instalação | Fonte |
|---|---|---|---|
| TypeScript / JavaScript | @ibanforge/sdk | npm install @ibanforge/sdk | sdks/typescript/ |
| Python | ibanforge | pip install ibanforge | sdks/python/ |
| Java (17+) | com.ibanforge:ibanforge-sdk | Dependência Maven, veja README | sdks/java/ |
| .NET (net8.0) | IBANforge.Sdk | dotnet add package IBANforge.Sdk | sdks/dotnet/ |
| Servidor MCP | ibanforge-mcp | npx -y ibanforge-mcp | mcp/ |
| Curl / qualquer cliente HTTP | — | — | Especificação OpenAPI |
O SDK Python vem com clientes síncrono + assíncrono, classes de exceção tipadas e um fallback de franquia gratuita para x402 integrado:
from ibanforge import IBANforge
# 1-line key, no e-mail: 25 requests a month, 200 once claimed
key = IBANforge.generate_api_key() # shown ONCE: store key["api_key"] now
with IBANforge(api_key=key["api_key"]) as client:
out = client.validate_iban("DE89370400440532013000")
print(out["country"]["code"]) # DE
print(out["bic"]["bank_name"]) # Commerzbank
print(out["bank_code_check"]["authoritative"]) # True (checked against the Bundesbank register)
# Or the free format-only check (mod-97 + structure, no DB hit)
out = IBANforge().format_iban("DE89370400440532013000")
Para desenvolvedores — API REST
# Validate IBAN — no key needed for the first 25 calls a week per source address
# (ISO week in UTC, reset on Monday 00:00 UTC). The answer carries a `trial` block
# with the count left this week, the reset instant and how to get a key.
curl -X POST https://api.ibanforge.com/v1/iban/validate \
-H "Content-Type: application/json" \
-d '{"iban":"DE89 3704 0044 0532 0130 00"}'
# The Swiss example of the SWIFT IBAN registry passes mod-97 too, and comes back
# bank_code_check.reason = "not_allocated": the SIX register allocates its bank code to nobody.
curl -X POST https://api.ibanforge.com/v1/iban/validate \
-H "Content-Type: application/json" \
-d '{"iban":"CH93 0076 2011 6238 5295 7"}'
# Beyond the keyless trial, send a key: an empty POST to /v1/keys/generate returns one
# (no e-mail, no card), for every endpoint, 200 requests a month once claimed.
curl -X POST https://api.ibanforge.com/v1/iban/validate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ifk_..." \
-d '{"iban":"DE89 3704 0044 0532 0130 00"}'
# Lookup BIC
curl https://api.ibanforge.com/v1/bic/UBSWCHZH80A
# Free format pre-flight (no auth, mod-97 only)
curl 'https://api.ibanforge.com/v1/iban/format?iban=DE89370400440532013000'
# Free demo (no auth)
curl https://api.ibanforge.com/v1/demo
| Método | Caminho | Custo | Descrição |
|---|---|---|---|
POST | /v1/iban/validate | $0.005 | IBAN único: veredito de código bancário + BIC com sua fonte + SEPA + emissor + risco + bc_nummer suíço. Uma franquia semanal sem chave por endereço de origem (veja acima) |
POST | /v1/iban/batch | $0.002/IBAN (USDC, x402) | Até 100 IBANs em uma chamada; em uma chave ou pacote de créditos, um crédito por IBAN |
GET | /v1/bic/{code} | $0.003 | Consulta BIC/SWIFT com LEI |
GET | /v1/ch/clearing/{iid} | $0.003 | BC-Nummer / IID suíço — SIC, euroSIC, QR-IID |
POST | /v1/iban/compliance | $0.02 | Sanções em nível de banco (OFAC, UE, ONU) + FATF + SEPA Instantâneo + prontidão VoP + pontuação de risco 0-100 |
GET | /v1/iban/format | grátis | Verificação pura de mod-97 + estrutura, sem consulta a banco de dados |
GET | /v1/iban/structure[/{country}] | grátis | Modelos de IBAN por país, sem autenticação |
GET|POST | /v1/reference/validate | grátis | RF/ISO 11649, QRR suíço, OGM/VCS belga, viitenumero finlandês |
POST | /v1/address/check | grátis | Endereço ISO 20022 vs regras sps / hvps_plus / fedwire |
GET | /v1/demo | grátis | Validações de exemplo, sem autenticação |
GET | /v1/credits/bundles | grátis | Pacotes de crédito pré-pagos e seus preços |
GET | /health | grátis | Saúde + status do banco de dados |
POST | /v1/keys/generate | grátis | Gerar uma chave de API ifk_*: sem corpo para uma chave que não requer e-mail (25 req/mês, 200 após reivindicada em /v1/keys/claim), ou {email} para 200 req/mês desde o início |
GET | /v1/keys/usage | grátis | Uso da sua chave neste mês (chave no cabeçalho Authorization) |
OpenAPI 3.1 completo: api.ibanforge.com/openapi.json.
Erros, limites e suporte
- Um IBAN inválido não é um erro HTTP.
POST /v1/iban/validateresponde200comvalid: false, um códigoerrore uma fraseerror_detail. Os códigos:invalid_format,unsupported_country,wrong_length,invalid_check_digits,checksum_failed,invalid_bban_structure. - Uma solicitação recusada carrega
{"error": "<token>", "message": "<sentence>"}:400para JSON malformado, umibanausente ou um lote acima de 100;402quando um pagamento é necessário ou uma cota é esgotada (cause.reasonindica qual);413para um corpo acima de 256 KB;429além do limite de taxa. - Limite de taxa: 100 solicitações por minuto por endereço IP. Um
429carregaRetry-After, e cada resposta contada carregaRateLimit-Limit,RateLimit-RemainingeRateLimit-Reset(rate-limits.yml). - Uso da sua chave:
GET /v1/keys/usage, eX-Quota-Used,X-Quota-Limit,X-Quota-Remainingem cada resposta servida em uma chave mensal;X-Credits-Remaining,X-Credits-Totalem uma chave de crédito pré-pago (GET /v1/credits/balance). - Suporte: support@ibanforge.com (cite seu
key_prefix, nunca a chave) ou GitHub Issues. - Disponibilidade: ao vivo na página de status. Um SLA por escrito (99,5% de disponibilidade mensal, créditos de serviço) cobre apenas assinaturas Editor/OEM.
- Os status e os códigos que as rotas compartilham, em três idiomas: ibanforge.com/docs/errors.
Por que preferir IBANforge à validação local mod-97?
A validação local mod-97 detecta erros de digitação. Ela não informa se o código bancário está alocado, não resolve BIC/SWIFT, não classifica EMIs (Wise / Revolut / Mercury / Modulr, um sinal real de conformidade), não verifica a acessibilidade SEPA e a prontidão para VoP, não retorna o BC-Nummer/QR-IID suíço, nem rastreia o banco do beneficiário contra listas de sanções. O IBANforge faz tudo isso em uma única chamada.
Desenvolvimento
npm run dev # Dev server (hot reload)
npm run test # Run tests
npm run check # Typecheck + lint + test
npm run db:seed # Rebuild BIC database from GLEIF
Implantação
Docker
docker build -t ibanforge .
docker run -p 3000:3000 --env-file .env ibanforge
Railway
Envie para main — o Railway faz a implantação automática via Dockerfile.
Variáveis de Ambiente
| Variável | Obrigatória | Descrição |
|---|---|---|
PORT | Não | Porta do servidor (padrão: 3000) |
WALLET_ADDRESS | Sim (produção) | Endereço da carteira USDC x402 |
FACILITATOR_URL | Sim (produção) | Endpoint do facilitador x402 |
Fontes de Dados
- Mais de 121 mil entradas BIC/SWIFT (entradas, não instituições). GLEIF e os registros nacionais são atualizados mensalmente; as linhas do SwiftCodes são uma cópia pública do diretório SWIFT congelada em janeiro de 2018 (MIT), reimportadas mensalmente sem alterações, e ainda representam cerca de dois terços do diretório. As contagens exatas variam a cada atualização; os números ao vivo são servidos em
/llms.txte/health. Detalhamento da atualização de 2026-07 (121.610 no total):- 81.949 de PeterNotenboom/SwiftCodes (cópia pública do diretório SWIFT licenciada sob MIT, dados congelados em janeiro de 2018)
- 39.288 do mapeamento BIC-LEI da GLEIF (as únicas linhas com LEI)
- 189 do EBA Clearing STEP2 SCT (diretório oficial de PSPs acessíveis via SEPA)
- 144 do Deutsche Bundesbank BLZ (arquivo oficial trimestral BLZ→BIC)
- 21 do NBP EWIB (registro oficial de bancos poloneses)
- 19 do SIX Group BankMaster BICs suíços não cobertos em outros lugares
- Enriquecimento de LEI para as linhas da GLEIF: API GLEIF
- Mais de 1.100 BC-Nummern / IIDs suíços (1.165 em 2026-07): CSV oficial do SIX BankMaster
- Classificação EMI / vIBAN: Conjunto curado de mais de 900 classificações de emissores não bancários — EMI, instituições de pagamento, bancos digitais (Wise, Revolut, N26, Mercury, Modulr, etc.); a contagem ao vivo é servida em
/llms.txt - Veredito do código bancário: registros nacionais da Alemanha (Bundesbank), Áustria (OeNB), Bélgica (NBB), Eslováquia (NBS), República Tcheca (ČNB), Bulgária (BNB, código bancário) e Suíça e Liechtenstein (SIX BankMaster), onde um código que o registro não possui é
not_allocated; listas parciais para Finlândia (Finance Finland), Itália (Banca d'Italia, com os códigos cancelados e seus sucessores legais), San Marino (BCSM) e Luxemburgo (ABBL), onde uma ausência não é uma recusa - Prontidão para VoP: registro do esquema EPC Verification of Payee (
vop.csv), atualizado semanalmente com as outras listas de conformidade - Nomes de países: API
Intl.DisplayNamesdo Node.js
Algumas dessas fontes podem ser servidas, mas não redistribuídas: as linhas dos diretórios EBA STEP2 e NBP, os registros OeNB, NBB e BCSM, a lista do Bank of England PRA, a lista da ONU e os registros EPC. O mesmo vale para as chaves polonesas, finlandesas e luxemburguesas do mapa composto de códigos bancários e a lista Finance Finland. Elas não estão neste repositório: a API hospedada as carrega de um repositório privado, e uma implantação sem elas responde "não consultado" onde elas falariam, nunca "não". Consulte NOTICE.
Recursos para agentes de IA
llms.txt— resumo curto + prompt inicial recomendado/.well-known/x402— descoberta x402 (catálogo legível por máquina)/.well-known/mcp/server-card.json— cartão do servidor MCP: descrições completas das ferramentas de dados somente leitura, todas as ferramentas listadas por nome/.well-known/agents.json— capacidades de agente Google A2A/openapi.json— especificação OpenAPI 3.1- npm
ibanforge-mcp— servidor MCP stdio - MCP Registry — listagem oficial
Legal
O uso da API hospedada (api.ibanforge.com) é regido pelos
Termos de Serviço. Consulte também a
Política de Privacidade e o
Acordo de Processamento de Dados pré-assinado (art. 28 GDPR)
para clientes cujas chamadas envolvam dados pessoais. A validação confirma a
estrutura do IBAN e os dados do registro — ela não confirma que uma conta existe ou
pertence a alguém.
Licença
MIT — consulte LICENSE.
A Licença MIT cobre o código e sua documentação, não os arquivos de dados: os registros de terceiros que eles contêm permanecem sujeitos aos termos de seus publicadores, descritos em NOTICE. Registros que não podem ser redistribuídos não estão mais neste repositório desde 25 de setembro de 2026; commits anteriores mantêm cópias, ainda sujeitas a esses termos.
Este projeto inclui componentes de terceiros licenciados sob a Apache License 2.0
(notavelmente @coinbase/x402 e pacotes x402 relacionados). Consulte NOTICE para
atribuições completas e avisos exigidos pela Apache 2.0.