Skip to content
IBANforge

IBANforge API

Download Postman Collection

IBANforge is a fast, reliable API for IBAN validation and BIC/SWIFT lookup. It covers 89 countries with real-time checksum verification, BBAN structure parsing, enriched institution data from GLEIF, SEPA compliance info, issuer classification (bank vs. EMI/neobank), sanctions & compliance screening with a 0–100 risk score, and exclusive Swiss clearing (BC-Nummer) data from SIX BankMaster.

Start free, without even a key. Two endpoints solve a whole problem at no cost: /v1/reference/validate checks payment references (RF/ISO 11649, Swiss QRR, Belgian OGM, Finnish viitenumero) with a sourced verdict, and /v1/address/check checks a structured ISO 20022 address against the SPS, T2 or Fedwire rules ahead of the November 2026 changes.

Base URL

https://api.ibanforge.com

All endpoints are served over HTTPS. HTTP requests are redirected automatically.

Authentication

Before any of them: the first 10 calls a day need nothing at all. POST /v1/iban/validate with a real iban and no key is served in full, 10 times a day per IP address. The answer carries a trial block saying how many are left today and the one request that gets you a free key. It is a taster, not a tier: past 10/day the endpoint answers 402 again, with cause.reason: "trial_exhausted".

Then, three ways in — pick what fits, your app or agent never hits a dead-end:

  1. Free API key — 200 requests/month, no credit card. Generate one with a single POST, then send Authorization: Bearer ifk_... with each request.
  2. Prepaid credit packs — 1k = $5, 5k = $20, 25k = $80. They never expire, purchasable by card or in USDC (POST /v1/credits/buy/1k|5k|25k). See pricing.
  3. x402 micropayments — fully autonomous pay-per-call in USDC for agents, no account at all. See the x402 guide.

A request without a valid key or payment gets a 402 response with machine-readable instructions for all three paths — autonomous agents can self-onboard.

Endpoints at a glance

EndpointMethodCostDescription
/v1/iban/validatePOST$0.005Validate a single IBAN
/v1/iban/batchPOST$0.002/IBANValidate up to 100 IBANs
/v1/bic/:codeGET$0.003Look up a BIC/SWIFT code
/v1/iban/compliancePOST$0.02Sanctions, FATF, SEPA/VoP reachability + 0–100 risk score
/v1/ch/clearing/:iidGET$0.003Swiss BC-Nummer / IID lookup (SIX BankMaster)
/v1/iban/formatGET or POSTFreeStructure, checksum, country and BBAN, no key needed. The registry (BIC, bank, SEPA, sanctions, Swiss clearing) is what the paid calls add
/v1/reference/validateGET/POSTFreePayment reference checksum (RF/ISO 11649, Swiss QRR, Belgian OGM, Finnish viitenumero)
/v1/address/checkPOSTFreeISO 20022 postal address conformity (SPS, HVPS+/T2, Fedwire), every finding sourced
/v1/ch/qr-bill/checkPOSTFreeSwiss QR-bill payload: header, QR-IBAN and reference pairing, checksums, structured (S) or combined (K) addresses before 14.11.2026, with a proposed structured form
/v1/audit/uploadPOSTFree preview, then 149 CHFA whole creditor file (CSV or XLSX): every row against the same registers, duplicates, BIC and address checks; masked preview for free, annotated workbook after payment. The page for non-developers is /audit
/v1/demoGETFreeExample validations (no payment needed)
/healthGETFreeService health check

Quick example

No key, nothing to sign up for — this works as it stands, 10 times a day per IP:

curl -X POST https://api.ibanforge.com/v1/iban/validate \
  -H "Content-Type: application/json" \
  -d '{"iban": "CH10 0023 0000 0000 1234 5"}'

The response then carries an extra trial block:

"trial": {
  "calls_used_today": 1,
  "calls_left_today": 9,
  "daily_limit": 10,
  "resets": "midnight UTC",
  "free_key": "POST https://api.ibanforge.com/v1/keys/generate with {\"email\":\"you@company.com\",\"source\":\"api-trial\"} — 200 requests a month, no card",
  "docs": "https://ibanforge.com/docs/api-keys?src=api-trial"
}

Past 10 calls a day, take the free key — one POST, no card — and add Authorization: Bearer ifk_... to the same request.

Response:

{
  "iban": "CH1000230000000012345",
  "valid": true,
  "country": {
    "code": "CH",
    "name": "Switzerland"
  },
  "check_digits": "10",
  "bban": {
    "bank_code": "00230",
    "account_number": "000000012345"
  },
  "bic": {
    "code": "UBSWCHZH",
    "bank_name": "UBS Switzerland AG",
    "city": "Zürich"
  },
  "sepa": {
    "member": true,
    "schemes": ["SCT", "SDD"],
    "vop_required": false
  },
  "issuer": {
    "type": "bank",
    "name": "UBS Switzerland AG"
  },
  "risk_indicators": {
    "issuer_type": "bank",
    "country_risk": "standard",
    "test_bic": false,
    "sepa_reachable": true,
    "vop_coverage": false
  },
  "clearing": {
    "iid": "00230",
    "name": "UBS Switzerland AG",
    "type": "bank",
    "town": "Zürich",
    "sic": true,
    "instant_payments_chf": true,
    "eurosic": true,
    "qr_iid": null
  },
  "formatted": "CH10 0023 0000 0000 1234 5",
  "cost_usdc": 0.005
}

Free testing

Use the /v1/demo endpoint to test the API without any payment setup:

curl https://api.ibanforge.com/v1/demo

This returns pre-validated example IBANs from multiple countries so you can explore the response format.

Next steps