API reference

Two endpoints. One of them is the product.

Create a key in the dashboard, then POST an IBAN to validate it. JSON in, JSON out. Base URL https://ibanly.app.

Authentication

Every call to the validator carries your key as a bearer token. Keys look like ibn_test_… and are shown once, when you create them.

# header on every /api/validate call
Authorization: Bearer ibn_test_9f2a…_4c1b…

Get a key

Sign in at the dashboard: your account starts on the free plan. Create a key there, one per app if you like, and copy it: it is shown only once. Revoke a key from the same page; it stops working at once.

An AI agent gets its key without the dashboard, through the Rose for Agents connector. See For AI agents. Without the connector, an agent can start a trial itself: auth.md.

POST /api/validate

Validate one IBAN. Whitespace and case are normalised for you.

# request
curl -X POST https://ibanly.app/api/validate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": {"iban": "GB82 WEST 1234 5698 7654 32"}}'

# 200 OK — valid
{
  "output": {
    "iban": "GB82WEST12345698765432",
    "valid": true,
    "country": "GB",
    "check_digits": "82",
    "bban": "WEST12345698765432",
    "formatted": "GB82 WEST 1234 5698 7654 32",
    "reason": null,
    "note": null
  },
  "usage": { "used": 1, "limit": 100 }
}

# 200 OK — invalid (a swapped digit)
{
  "output": {
    "iban": "GB28WEST12345698765432",
    "valid": false,
    "country": "GB",
    "check_digits": "28",
    "bban": "WEST12345698765432",
    "reason": "checksum failed (mod 97)"
  },
  "usage": { "used": 2, "limit": 100 }
}

A well-formed IBAN whose country is outside the length table still gets checksum-validated, with a note that the length was not checked.

MCP server

The same validation is a tool, validate_iban, on Ibanly's MCP server: https://ibanly.app/mcp (Streamable HTTP). Add it to Claude Code with claude mcp add --transport http ibanly https://ibanly.app/mcp: your assistant asks you to sign in to Ibanly once and creates its own key, which you can revoke in the dashboard. An API key also works as Authorization: Bearer.

Errors

Errors are JSON with a detail field and a matching HTTP status.

StatusWhen
401Missing, malformed, or unknown API key.
409Account has no active plan.
413Request body larger than 4 KB.
422Body is not a JSON object, or input.iban / email is missing or invalid.
429Rate limit exceeded. Wait a minute.

Rate limits

Per client IP: 60 validations a minute and 5 sign-ups a minute. Over the limit returns 429. These protect the anonymous doors; your monthly plan allowance is separate.

Privacy

IBANs are validated in memory and discarded. They are never stored and never logged — not even in error responses.

Get a key and make your first call

Free plan, 100 validations a month.

Create a free account