SweKit - Swedish validators
Personnummer sueco, orgnr, bankgiro, OCR, conta para IBAN e dias bancários como um servidor MCP remoto somente leitura.
Servidor MCP hospedado
npx add-mcp 'https://swekit-api.zenith-ops.workers.dev/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Convenções
- Os validadores retornam
{"valid": bool, "errors": [codes]}mais campos analisados. HTTP 200 mesmo se o número for inválido; HTTP 400 apenas para parâmetros ausentes ou malformados. - Erros:
{"error":{"code","message"}}. Limite de taxa: HTTP 429 comRetry-After. - Cabeçalho de resposta
X-Plan: free | pro | gateway. - Exemplo de POST:
curl -X POST https://swekit-api.zenith-ops.workers.dev/v1/personnummer -H 'content-type: application/json' -d '{"value":"811218-9876"}'
Acesso e limites
Demonstração anônima: 20 solicitações/min/IP. Limites maiores: envie X-API-Key: <license key> (600 req/min). Assinantes do marketplace usam a própria chave e cota do marketplace. Chave Pro: entre em contato com o operador; os preços não são publicados.
Exemplos de curl
curl "https://swekit-api.zenith-ops.workers.dev/v1/personnummer?value=811218-9876"
curl -X POST "https://swekit-api.zenith-ops.workers.dev/v1/personnummer" -H 'content-type: application/json' -d '{"value":"811218-9876"}'
curl -H 'X-API-Key: YOUR_KEY' "https://swekit-api.zenith-ops.workers.dev/v1/account?clearing=7507&account=1211203"
# error response (missing parameter)
curl "https://swekit-api.zenith-ops.workers.dev/v1/orgnr"
{"error":{"code":"missing_parameter","message":"Missing parameter: value"}}
Códigos de erro
| HTTP | Código | Significado |
|---|---|---|
| 400 | missing_parameter | Entrada obrigatória não foi fornecida |
| 400 | bad_base | Base de OCR é inválida |
| 400 | bad_year | Ano deve ser 1900–2200 |
| 400 | bad_date | Data deve ser AAAA-MM-DD |
| 400 | bad_input | Entrada de dia útil é inválida ou fora do intervalo |
| 400 | invalid_json | Corpo do POST não é JSON válido |
| 401 | invalid_api_key | Chave de API é inválida ou expirada |
| 429 | rate_limited | Cota por minuto excedida |
| 500 | internal_error | Erro inesperado do servidor |
Configuração do cliente MCP
Claude Desktop (claude_desktop_config.json):
{"mcpServers":{"swekit":{"command":"npx","args":["mcp-remote","https://swekit-api.zenith-ops.workers.dev/mcp"]}}}
Cursor:
{"mcpServers":{"swekit":{"url":"https://swekit-api.zenith-ops.workers.dev/mcp"}}}
VS Code (.vscode/mcp.json):
{"servers":{"swekit":{"type":"http","url":"https://swekit-api.zenith-ops.workers.dev/mcp"}}}
Servidor MCP
Endpoint MCP remoto https://swekit-api.zenith-ops.workers.dev/mcp (POST JSON-RPC 2.0: initialize, tools/list, tools/call). Ferramentas: validate_personnummer, validate_orgnr, validate_bankgiro, validate_plusgiro, validate_ocr, generate_ocr, swedish_account_to_iban, validate_iban, lookup_clearing_number, swedish_holidays, swedish_date_info, add_business_days, count_business_days.
Semântica que vale a pena conhecer
- Contas bancárias: regras de dígito verificador conforme Bankgirot (tipo 1 variantes 1-2 mod-11; tipo 2 variantes 1/3 mod-10, 2/4 mod-11). Contas Swedbank 8xxx são mod-10 "como regra geral" e exigem o 5º dígito do clearing para IBAN. Plusgiro não pode ser convertido em IBAN. Algumas contas antigas não passam nos dígitos verificadores.
- Dias úteis (modo bancário): sábados, domingos, feriados públicos, além de midsommarafton, julafton e nyårsafton não são dias úteis (estes são equiparados a domingos para prazos de pagamento conforme a lei sueca). Use
mode=workpara lógica simples de dia da semana menos feriados. Verifique seus próprios contratos para regras específicas da empresa. - Personnummer: idade e século são inferidos pelo separador (
+= 100+). Gênero vem do 9º dígito (sexo legal registrado). Use para validação, não para identificação.
Perguntas frequentes
Um número válido prova que uma conta ou pessoa existe?
Não. A API verifica apenas sintaxe, datas e dígitos verificadores; não é um serviço de identidade, propriedade ou existência de conta.
As solicitações são armazenadas?
Nenhum dado de solicitação é armazenado pelo serviço. Use POST para números pessoais para que eles não apareçam em URLs ou logs de acesso.
Posso converter Plusgiro em IBAN?
Não. Contas bancárias suecas podem ser convertidas quando sua faixa de clearing é conhecida; Plusgiro não é um formato de conta bancária.
Quais são os limites?
Acesso anônimo é de 20 solicitações/minuto/IP. Uma chave Pro válida permite 600 solicitações/minuto/chave. Chave Pro: entre em contato com o operador; os preços não são publicados.
Endpoints
GET /v1/personnummer
Validar e analisar um personnummer / samordningsnummer sueco
value | string | Personnummer em qualquer formato comum (YYMMDD-NNNC, YYYYMMDDNNNC, com + para 100+). Prefira POST JSON {"value": "..."} para que o número nunca apareça em uma URL. |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/personnummer?value=811218-9876&at=2026-10-16"
GET /v1/orgnr
Validar organisationsnummer, derivar forma jurídica e número de IVA sueco (SE#########01)
value | string | Nº de org. como 556036-0793, 5560360793, SE556036079301 |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/orgnr?value=556036-0793"
GET /v1/bankgiro
Validar número bankgiro (Luhn) e formatá-lo
value | string | 7-8 dígitos, com ou sem hífen |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/bankgiro?value=5402-9681"
GET /v1/plusgiro
Validar número plusgiro
value | string | 2-8 dígitos |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/plusgiro?value=4-8"
GET /v1/ocr/validate
Validar uma referência OCR / de pagamento (dígito verificador Luhn, dígito de comprimento opcional)
value | string | Dígitos OCR |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/ocr/validate?value=12351"
GET /v1/ocr/generate
Gerar uma referência OCR a partir de um número base
base | string | Dígitos, ex.: número da fatura |
|---|---|---|
length_digit | boolean | Adicionar dígito de comprimento (padrão false) |
curl "https://swekit-api.zenith-ops.workers.dev/v1/ocr/generate?base=123&length_digit=true"
GET /v1/account
Validar uma conta bancária sueca (clearing + conta, conforme regras do Bankgirot) e converter para IBAN
number | string | Dígitos completos da conta (clearing primeiro), OU |
|---|---|---|
clearing | string | Número de clearing (4 dígitos; 5 para Swedbank 8xxx) |
account | string | Número da conta sem o clearing |
curl "https://swekit-api.zenith-ops.workers.dev/v1/account?clearing=7507&account=1211203"
GET /v1/iban
Validar qualquer IBAN (ISO 13616 mod-97, comprimento por país) e identificar bancos suecos
value | string | IBAN, espaços permitidos |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/iban?value=SE45 5000 0000 0583 9825 7466"
GET /v1/bic
Validar formato BIC/SWIFT
value | string | 8 ou 11 caracteres |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/bic?value=ESSESESS"
GET /v1/clearing
Consultar banco, BIC, ID IBAN e tipo de conta para um número de clearing
value | string | Primeiros 4 dígitos do número da conta |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/clearing?value=8327"
GET /v1/holidays
Feriados públicos suecos e vésperas para um ano
year | integer | 1900-2200 (padrão: ano atual) |
|---|
curl "https://swekit-api.zenith-ops.workers.dev/v1/holidays?year=2026"
GET /v1/date
Informações sobre uma data: dia da semana (sv/en), semana ISO, nomes de feriados, status de dia útil
date | string | AAAA-MM-DD |
|---|---|---|
mode | string | "bank" (padrão; midsommarafton, julafton, nyårsafton também excluídos) ou "work" |
curl "https://swekit-api.zenith-ops.workers.dev/v1/date?date=2026-12-24"
GET /v1/business-days/add
Adicionar (ou subtrair) N dias úteis a uma data
date | string | AAAA-MM-DD |
|---|---|---|
days | integer | Positivo ou negativo, |n| <= 3650 |
mode | string | bank (padrão) ou work |
curl "https://swekit-api.zenith-ops.workers.dev/v1/business-days/add?date=2026-12-22&days=2"
GET /v1/business-days/between
Contar dias úteis entre duas datas
from | string | AAAA-MM-DD |
|---|---|---|
to | string | AAAA-MM-DD |
mode | string | bank (padrão) ou work |
curl "https://swekit-api.zenith-ops.workers.dev/v1/business-days/between?from=2026-10-16&to=2026-11-16"
Fontes de dados
- Bankgirot, Bankernas kontonummer, 2024-02-22.
- Bankinfrastruktur i Sverige AB, página de IBAN e número de conta nacional sueco (tabela de clearing, data dos dados 2026-10-16).
- Feriados: calculados (algoritmo de Páscoa Meeus/Jones/Butcher + regras estatutárias).