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 com Retry-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

HTTPCódigoSignificado
400missing_parameterEntrada obrigatória não foi fornecida
400bad_baseBase de OCR é inválida
400bad_yearAno deve ser 1900–2200
400bad_dateData deve ser AAAA-MM-DD
400bad_inputEntrada de dia útil é inválida ou fora do intervalo
400invalid_jsonCorpo do POST não é JSON válido
401invalid_api_keyChave de API é inválida ou expirada
429rate_limitedCota por minuto excedida
500internal_errorErro 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=work para 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

valuestringPersonnummer 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)

valuestringNº 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

valuestring7-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

valuestring2-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)

valuestringDí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

basestringDígitos, ex.: número da fatura
length_digitbooleanAdicionar 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

numberstringDígitos completos da conta (clearing primeiro), OU
clearingstringNúmero de clearing (4 dígitos; 5 para Swedbank 8xxx)
accountstringNú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

valuestringIBAN, 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

valuestring8 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

valuestringPrimeiros 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

yearinteger1900-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

datestringAAAA-MM-DD
modestring"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

datestringAAAA-MM-DD
daysintegerPositivo ou negativo, |n| <= 3650
modestringbank (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

fromstringAAAA-MM-DD
tostringAAAA-MM-DD
modestringbank (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).