Skip to main content
Glama

Server Details

Check the bank behind an IBAN before you pay: bank-code check, BIC with source, bank-level sanctions

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
76.0% over 60 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cammac-creator/ibanforge
GitHub Stars
3
Server Listing
IBANforge

TDQS

A4.6/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have sharply distinct purposes and the descriptions actively steer usage (e.g. lookup_bic explicitly says use validate_iban for IBANs, batch_validate_iban carves itself out of repeated validate_iban calls). The main overlap is validate_iban vs check_compliance, since check_compliance explicitly returns 'the full validate enrichment plus a compliance object,' which can blur the boundary for an agent deciding between them.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun pattern (validate_iban, batch_validate_iban, lookup_bic, lookup_ch_clearing, check_compliance, request_api_key, poll_api_key, send_feedback). The verbs are meaningful and the naming is fully predictable.

Tool Count5/5

At 11 tools the set is well within the 3-15 sweet spot and each tool earns its place, spanning validation, lookup, compliance, and the auth/feedback meta-flow. Nothing feels padded or missing for the stated scope.

Completeness4/5

The surface broadly covers the domain: single and batch IBAN validation, BIC and Swiss clearing lookups, compliance triage, payment reference and QR-bill checks, plus API-key lifecycle and feedback. Minor gaps exist (no reverse bank-name search or standalone SEPA-reachability tool, though these are largely folded into validate_iban), but core workflows are covered end to end.

Available Tools

11 tools
batch_validate_ibanBatch Validate IBANsA
Read-onlyIdempotent
Inspect

Validate up to 100 IBANs in a single call. Paid per call in USDC via x402, it costs $0.002 per IBAN instead of $0.005 per validate_iban call; on an API key or a credit pack each IBAN uses one request or credit, the same as one validate_iban call. USE WHEN: the user pastes a list of IBANs, asks to clean a CSV/spreadsheet of bank accounts, asks to dedupe a customer database, asks to triage a payout list before sending, or whenever you would otherwise call validate_iban more than 2-3 times in a row. RETURNS: { results: [...same shape as validate_iban], count, valid_count }. COST: $0.002 USDC per IBAN via x402 (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
ibansYesArray of IBANs (1-100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of IBANs processed.
resultsYesOne result per input IBAN, in the same order. Same shape as validate_iban.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds what they cannot: pricing per IBAN, how batch billing differs from single calls, the free-tier rate limit (25 units/week per source address, Monday 00:00 UTC reset), and the exact auth mechanism (Authorization: Bearer ifk_… or X-API-Key). That is genuinely useful operational context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence and the USE WHEN/RETURNS blocks are well front-loaded, but the COST parenthetical is a long run-on that nests free-tier, key-generation, and auth details in an almost unparseable sentence. Valuable information delivered with poor structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the return shape ({ results, count, valid_count }), the cost and billing model, auth headers, and rate limits — everything an agent needs to invoke and interpret this call. An output schema also exists, so return-value explanation is a bonus rather than a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single `ibans` parameter, so the schema already documents the array of 1-100 strings. The description restates 'up to 100 IBANs' but adds no format, normalization, or error-handling guidance beyond what the schema supplies. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'Validate up to 100 IBANs in a single call.' The batching dimension immediately separates it from the singular validate_iban sibling without needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete USE WHEN list (pasted list, CSV cleanup, dedupe, payout triage) plus an explicit routing rule: 'whenever you would otherwise call validate_iban more than 2-3 times in a row.' The trigger condition for choosing this over the sibling is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_complianceCompliance CheckA
Read-onlyIdempotent
Inspect

Run a pre-flight compliance triage on an IBAN before sending a SEPA / cross-border payment. USE WHEN: the user is about to send a payment / payout / refund and wants to triage risk first, asks whether the payee's bank or its country is under sanctions, asks if a SEPA Instant transfer can reach the bank, or needs a numeric risk score for an internal payment-approval workflow. NOT A REGULATED AML/CFT PRODUCT — informational triage only. For regulated screening use Refinitiv, Acuris, or ComplyAdvantage. CHECKS: IBAN validity + sanctions lists (OFAC, EU, UN) matched on the payee's bank (BIC8), the country checked against a fixed list of sanctioned jurisdictions, never the payee's name + FATF status + SEPA Instant reachability + whether the EPC Verification of Payee (VoP) register lists the bank as ready; the name check itself is done by the payee's bank, never here. RETURNS: the full validate enrichment plus a compliance object with risk_score (0-100, 0 = safest), risk_level (low/medium/elevated/high/critical), sanctions matched_lists + fatf_status, reachability, vop status, and flags[] (e.g. sanctioned_country, fatf_grey_list, emi_issuer, no_vop). compliance.sanctions.institution_listed says whether the payee's bank is on a list (null when no bank was screened, where bank_sanctioned still answers false) and payee_screened is always false; compliance.reachability.listed_in_epc_registers and compliance.vop.register_status name the registers' answers, null when not consulted (screened false); outside the SEPA area the country answers (false, not_listed) whether or not the registers are loaded. The flag bank_code_inferred carries no weight. COST: $0.02 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
ibanYesIBAN to check

Output Schema

ParametersJSON Schema
NameRequiredDescription
bicNo
bbanNo
ibanYesNormalized IBAN (uppercase, no spaces).
metaYes
sepaNo
errorNo
validYes
checksNoOne status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN), ES (DC) and DE (the account-number check digit, by the method the Bundesbank lists for the bank code), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere. In DE it is not_checked when the bank code is not in the Bundesbank file or its method is not checked here, and not_applicable when the bank uses no check digit (method 09); national_check_digits.verified_by says whether a German verdict rests on the Bundesbank test numbers or on an independent implementation only. pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true.
issuerNo
countryNo
clearingNoSwiss clearing data when country is CH or LI.
cost_usdcYesWhat THIS call was billed. Zero on the free MCP tier.
formattedNoIBAN with 4-char groups for display.
complianceYes
next_stepsNoOrdered advice derived from THIS result: what blocks a payment first, what merely enriches it after. Branch on `code`, never on the prose. `because` names the field that produced the step so the advice is auditable. Empty for an IBAN that failed validation.
check_digitsNo
error_detailNo
modulus_checkNo
processing_msNo
bank_code_checkNo
list_price_usdcNoCatalogue price of the same call on the paid REST/x402 route.
risk_indicatorsNo
bank_code_holderNoconfirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, or a partial register on a hit). inferred: we name a holder from a source that cannot settle it (our composite map, the prefix fallback, a published structural rule), so read it as our inference. not_allocated: the national register says nobody holds this code, so do not send. unknown: no conclusion. valid stays true in all four: it only means the IBAN is well formed. bank_code_check.status verified means resolved; this field says whether a source settles it.
psd_registrationNo
official_identityNoWho a central bank says holds the resolved code (ECB by LEI and for FR bank codes, Banco de Espana for ES). Present only on a match — absence is not a negative. INFORMATIONAL ONLY: it never changes valid or bank_code_check, because both publishers relay rather than allocate.
pra_authorisationNo
national_check_digitsNoThe check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN), de_pruefziffer (DE: the check digit of the 10-digit account number, computed by the method the Deutsche Bundesbank lists for the bank code in its Bankleitzahlendatei, named in method; the IBAN check digits already cover the whole BBAN, this says whether that bank could have issued the account number). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable: a BBAN without the national layout, which a valid IBAN never has, or in DE a bank that uses no check digit (method 09) or a method that defines none for that range of account numbers. not_checked (DE only): the check did not run on our side, because the bank code is not in the Bundesbank file or its method is not checked here (method 44, and methods no bank uses); it says nothing about the beneficiary. verified_by (DE only, whenever the method ran): bundesbank_test_numbers (the method gives the expected answer on every test number and worked example the Bundesbank publishes; a fail adds the blocking step national_check_digits_failed) or independent_implementation (the Bundesbank publishes no test number for the method, which was verified against an independent implementation only; a fail adds the warning step national_check_digits_suspect and never stops a payment). detail, present on fail, not_applicable and not_checked, says which digits disagree or why nothing was checked; it never gives the expected key. In DE the block also carries method (the Bundesbank method code), verified_by, source (with the credit line the Bundesbank asks for) and table_fetched_on (the day the method table was read). checks.national_check_digits repeats status.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safe-read profile (readOnly, idempotent, non-destructive). The description goes well beyond them: it discloses the null/absent semantics of institution_listed and register statuses, that payee_screened is always false, that bank_code_inferred carries no weight, and the exact cost/auth model including free-tier limits and how to supply an ifk_ key. That is rich behavioral context an agent cannot get from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The labelled sections (USE WHEN / CHECKS / RETURNS / COST) front-load the selection criteria well, but the body is very long. The RETURNS block restates field-level output that the output schema already encodes, and the COST block drifts into API-key generation endpoint instructions that are procedural rather than selection-relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool whose output schema carries the return shape, the description still supplies everything an agent needs to decide and call correctly: triggers, exclusions, the field semantics of the compliance object, and the cost/auth requirements. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the schema already documents it fully. The description adds no format or syntax detail about the IBAN beyond what the schema provides, so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run a pre-flight compliance triage on an IBAN') and scopes it to a concrete situation (before sending a SEPA / cross-border payment). The CHECKS section enumerates exactly what is inspected, which differentiates it cleanly from sibling validate_iban without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The USE WHEN clause names four concrete trigger conditions, and the description explicitly excludes the regulated-screening use case by naming alternative vendors (Refinitiv, Acuris, ComplyAdvantage). It also states what the tool does NOT do (payee name check is performed by the payee's bank, never here).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_postal_addressCheck ISO 20022 Postal AddressA
Read-onlyIdempotent
Inspect

Check a structured ISO 20022 postal address against a payment rail's published address rules, rule by rule, each verdict citing the document it comes from. USE WHEN: assembling a payment instruction (pain.001, a Fedwire message, a T2 transfer) with a creditor or debtor address, to learn whether the rail accepts it BEFORE submitting. The November 2026 changes (SIC 20.11, Fedwire 16.11, T2 R2026.NOV) remove the fully unstructured address option — this check tells you whether an address survives them. DO NOT USE to verify that a street or town EXISTS: this checks conformity with the message format rules, not postal reality. SCHEMES: 'sps' (Swiss Payment Standards, SIX), 'hvps_plus' (HVPS+ / T2, ECB), 'fedwire' (Federal Reserve). There is deliberately NO 'cbpr+' scheme: that guideline sits behind swift.com, unreachable to automated readers, and a conformity boolean quoting an unread document would be a guess dressed as a verdict — the note field restates this on every answer. VERDICTS: pass, fail, and not_applicable — the last marks a rule whose precondition is not met and never counts as a pass. conforms is true when no finding failed. IMPORTANT: relay each finding's source string — it names the exact document, version and validity date the rule is quoted from. They are what makes the verdict auditable. FREE: the rules are published commodities. The paid surface is the postal_address block that /v1/bic and /v1/iban/validate return for the resolved institution. COST: $0 per call, on every surface (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
schemeYesWhich rail's rules to check against: sps | hvps_plus | fedwire
addressYesThe ISO 20022 PostalAddress under test, in ISO tag vocabulary (snake_cased).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYesWhy 'cbpr+' is not on the menu. Served on every answer.
schemeYessps | hvps_plus | fedwire — the rule set that was applied.
conformsYesTrue when no finding failed. not_applicable findings never count against it.
findingsYesOne entry per rule of the scheme, in a stable order.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safe-read profile, but the description adds substantial behavior beyond them: the three-valued verdict model (pass/fail/not_applicable with not_applicable never counting as a pass), how conforms is computed, the deliberately absent cbpr+ scheme and why, the requirement to relay each finding's source string, and the full cost/auth model (25 units/week anonymous, ifk_ key tiers, header format).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose, when-to-use and when-not are front-loaded and tight, but the COST paragraph is a very long parenthetical with key-generation URLs, monthly quotas, reset timing and header alternatives that dominates the tail of the description. The information is useful, yet it is not structured for scanning and inflates the definition considerably.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema already present, the description still explains the verdict vocabulary, the conforms flag, the source-string contract, the supported schemes and the explicit non-goal, plus access/cost constraints. Nothing needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description exceeds it by expanding each enum value into its owner and rail ('sps' = Swiss Payment Standards/SIX, 'hvps_plus' = HVPS+/T2/ECB, 'fedwire' = Federal Reserve), which helps an agent pick the right scheme. It does not add field-level guidance for the nested address object (e.g. adr_tp handling), so it stops short of 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb (check), resource (structured ISO 20022 postal address), and mechanism (against a rail's published address rules, rule by rule with cited sources). It is clearly distinguishable from siblings like validate_iban, lookup_bic or check_compliance, and the 'SCHEMES' line pins the exact three rule sets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit USE WHEN (assembling pain.001, Fedwire, T2 payment instructions, before submission) and explicit DO NOT USE (verifying that a street or town exists), which rules out the most likely mis-invocation. The November 2026 context tells the agent when the check is most relevant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_swiss_qr_billCheck Swiss QR-bill PayloadA
Read-onlyIdempotent
Inspect

Check a Swiss QR-bill payload, the text a QR-bill's code carries (starts with SPC), rule by rule, each finding citing the SIX document it comes from. USE WHEN: an agent, an ERP or an accounting tool holds a scanned or generated QR-bill and must know before paying or issuing it whether it is well-formed, whether the reference type matches the IBAN (QRR needs a QR-IBAN, IID 30000-31999), and above all whether the creditor and debtor addresses are STRUCTURED (type S) or still COMBINED (type K): type K has not been permitted since 21.11.2025, and the banks guarantee payment of a type K QR-bill only until the end of September 2026. DO NOT USE to learn which bank holds the account or its payment-rail participation: that is the paid validate_iban. RETURNS: { valid, ready_for_2026_11_14, creditor_iban { value, valid, country, qr_iban, iid }, creditor { present, address, structured, sps_check, proposed_structured }, ultimate_debtor, amount, currency, reference { type, value, valid, note }, findings [{ code, severity, field, detail, source }], next_steps, source }. A combined address comes back with proposed_structured, the S-type fields derived from the combined lines, to relay as a fix. IMPORTANT: relay each finding's source string. COST: $0 per call, on every surface (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadYesThe Swiss QR Code text with real line breaks: SPC, 0200, 1, IBAN, creditor (7 lines), ultimate creditor (7 empty lines), amount, currency, ultimate debtor (7 lines), reference type, reference, message, EPD, optional billing information and alternative schemes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
validYesTrue when no finding has severity error.
amountYes
codingYes
sourceYes
qr_typeYes
trailerYes
versionYes
creditorYes
currencyYes
findingsYes
referenceYes
next_stepsYes
creditor_ibanYes
ultimate_debtorYes
alternative_schemesYes
billing_informationYes
ready_for_2026_11_14Yesvalid AND every present address is structured (type S). The name is kept for compatibility and is not a deadline: type K has not been permitted since 21.11.2025, and the banks guarantee payment of a type K QR-bill only until the end of September 2026.
unstructured_messageYes
ultimate_creditor_emptyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: per-finding source attribution from the SIX document, the specific checks performed (QRR vs QR-IBAN/IID 30000-31999, structured vs combined addresses), the temporal guarantees, and a full auth/cost model ($0, 25 units/week unkeyed, ifk_ key generation and claim endpoints, Bearer/X-API-Key placement). That is unusually rich operational context for a mutation-free read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and clearly sectioned (purpose, USE WHEN, DO NOT USE, RETURNS, IMPORTANT, COST), which makes it scannable despite its length. The COST block is disproportionately long and partly repeats the transport/key rules, which is the only place sentences fail to fully earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single-parameter tool with an output schema, the description still enumerates the return shape field by field, explains the non-obvious proposed_structured field and how to relay it, and instructs the agent to propagate each finding's source string. Nothing needed to call it correctly or act on its result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter and schema description coverage is 100%, with the schema already spelling out the 7-line creditor/debtor layout and line ordering. The description adds only the 'starts with SPC' hint, which is already present in the schema description, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (check a Swiss QR-bill payload) and immediately disambiguates the jargon by defining the payload as 'the text a QR-bill's code carries (starts with SPC)'. It also names the sibling it must not be confused with (validate_iban) and its own scope boundary, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains an explicit USE WHEN clause tied to a concrete situation (a scanned or generated QR-bill held by an agent, ERP, or accounting tool, before paying or issuing) and an explicit DO NOT USE clause naming the alternative tool (validate_iban) for the bank/payment-rail question. It even quantifies why the check matters (type K banned since 21.11.2025, guarantee until end of September 2026), which sharpens the selection decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_bicLookup BIC/SWIFTA
Read-onlyIdempotent
Inspect

Resolve a BIC / SWIFT code into the underlying bank: name, country, city, LEI, and registered head-office address (where available). USE WHEN: the user already has a BIC/SWIFT (8 or 11 chars, alphanumeric, e.g., "UBSWCHZH80A", "DEUTDEFF") and asks which bank it belongs to, where the bank is, or its LEI for compliance/regulatory matching. DO NOT USE for IBAN inputs — call validate_iban instead, it resolves the BIC for you. BACKED BY: BIC directory, 121,000+ entries (entries, not institutions): GLEIF and national registers, refreshed monthly, plus a public copy of the SWIFT directory frozen in January 2018 that still makes up about two thirds of the rows. 39,000+ of the rows carry an LEI from GLEIF. SOURCE: source names the dataset of this row and source_name spells it out; source_as_of is present only when that dataset is a copy frozen at that month (the public copy of the SWIFT directory, frozen in January 2018). listed_in_current_source says whether this BIC8 still appears in a list refreshed this cycle (GLEIF, a national register, the EPC scheme registers, the EBA STEP2 and NBP lists): true when one of them carries it, null when it was not found in what could be read in full. It never answers false today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, which can drop a BIC they carry, so an absence is not proven. It does not prove the bank still exists under this name. COST: $0.003 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
bicYesBIC/SWIFT code (8 or 11 chars)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bicYesEcho of the input, normalized to uppercase.
leiNoLegal Entity Identifier (ISO 17442) if available.
bic8No8-char form (institution-level).
cityNoNull, never an empty string, when the source leaves the town blank.
noteNoPresent only when found is false and the part of the directory served from a private file (EBA STEP2, NBP and OeNB records) is not loaded on this deployment: the absence was not looked up there.
bic11No11-char form including branch.
errorNo
foundNoTrue only when the row names an institution: a record is complete or not found.
validNoSet when the BIC failed format validation.
sourceNoCode of the dataset this row comes from.
countryNoSame shape as REST GET /v1/bic/:code. name is the row's country name, then the ISO name, and falls back to the country code only when neither exists.
lei_statusNo
branch_codeNo
branch_infoNo
institutionNoBank legal name.
is_test_bicNo
source_nameNosource names the dataset of this row and source_name spells it out; source_as_of is present only when that dataset is a copy frozen at that month. listed_in_current_source says whether this BIC8 still appears in a list refreshed this cycle (GLEIF, a national register, the EPC scheme registers, the EBA STEP2 and NBP lists): true when one of them carries it, null when it was not found in what could be read in full. It never answers false today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, which can drop a BIC they carry, so an absence is not proven. It does not prove the bank still exists under this name.
country_codeNoDEPRECATED since 1.4.0, removed no earlier than 2027-01-01. Use country.code.
country_nameNoDEPRECATED since 1.4.0, removed no earlier than 2027-01-01. Use country.name, which is never null: the row's country name, else the ISO name, else the code.
source_as_ofNoYear-month the source DATA is from, present only for a frozen copy.
valid_formatNo
listed_in_current_sourceNoWhether this BIC8 still appears in a list refreshed this cycle: GLEIF, the directory sources that carry no vintage, a national register, the EPC scheme registers. true when one of them carries it; null when it was not found in what could be read in full (never false by default). false is reserved for an index built from every list read in full, which is not the case today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, so this field answers true or null. It does NOT prove the bank still exists under this name: a clearing list can keep the name of a bank that was absorbed.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial context beyond them: provenance and freshness (121k+ entries, monthly refresh, a SWIFT copy frozen in Jan 2018), LEI coverage volume, the nuanced semantics of listed_in_current_source (can be true or null, never false, and why), the caveat that it does not prove the bank still exists, and a detailed cost model with free tiers and key handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded (purpose, then USE WHEN, then DO NOT USE), but the back half is dense and verbose: the listed_in_current_source explanation and the multi-clause cost/pricing paragraph run long, and much of the output-field semantics is likely duplicated in the output schema. Every sentence is not tightly earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with data-provenance and freshness caveats, the description is thorough, and it even explains return-field semantics despite an output schema existing. An agent has everything needed to decide, invoke, and interpret the call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage for the single bic parameter is 100%, so the baseline is 3. The description adds marginal value over the schema by specifying alphanumeric and providing concrete examples ("UBSWCHZH80A", "DEUTDEFF"), which helps the agent format the input correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (BIC/SWIFT → underlying bank) and enumerates the returned fields (name, country, city, LEI, registered head-office address). It explicitly distinguishes itself from the sibling validate_iban, so an agent can tell the two apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit USE WHEN clause (user already holds an 8/11-char BIC and asks which bank it is, where it is, or its LEI) and a DO NOT USE clause routing IBAN inputs to validate_iban. Both the condition and the named alternative are given, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_ch_clearingSwiss Clearing LookupA
Read-onlyIdempotent
Inspect

Resolve a Swiss BC-Nummer / IID (1 to 5 digits) into the underlying institution. USE WHEN: the user mentions a Swiss bank by BC-Nummer or IID, pastes a CH or LI IBAN clearing code, asks routing details for a Swiss instant transfer (SIC, euroSIC), asks about QR-bill QR-IID resolution, or needs to classify a Swiss financial institution (bank vs PFS vs SIC-only participant). EVERY IID OF THE SIX BANKMASTER, with its full payment-rail participation (SIC, RTGS CHF, Instant Payments CHF, euroSIC, LSV+/BDD) plus QR-IID allocation, not just a name lookup. BACKED BY: 1,100+ SIX BankMaster entries (Swiss official source, refreshed monthly). RETURNS: institution { name, type, iid_type, headquarters_iid }, address, bic, payment_services { sic, rtgs_chf, instant_payments_chf, eurosic, lsv_bdd_chf, lsv_bdd_eur }, sic_iid, qr_iid, valid_on. Only relevant for CH and LI accounts. COST: $0.003 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
iidYesSwiss IID (1-5 digit number)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bicNoBIC if mapped.
iidNoNormalized 5-digit BC-Nummer.
noteNo
errorNo
foundNo
qr_iidNoQR-bill enabled IID.
addressNo
messageNo
sic_iidNo
valid_onNo
cost_usdcNoWhat THIS call was billed. Zero on the free MCP tier.
institutionNo
list_price_usdcNoCatalogue price of the same call on the paid REST/x402 route.
redirected_fromNo
payment_servicesNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile needs no restating. The description goes well beyond that: data provenance (1,100+ SIX BankMaster entries, monthly refresh), scope limits (CH and LI only), auth mechanism (Bearer ifk_ / X-API-Key), and a concrete rate-limit/throttling model with reset schedule.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose, USE WHEN, and RETURNS are front-loaded and scannable. However, the COST section is a dense run-on parenthetical packing free-tier units, weekly reset timing, key-generation endpoints, key-claim URLs, and two header variants into one sentence, and it awkwardly references batch_validate_iban mid-token. The information is useful but not proportionally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one required parameter, an output schema present, and annotations covering the safety profile, the description still supplies the domain framing an agent needs: what the IID is, what the returned payment_services fields mean at a high level, provenance, and CH/LI limitation. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the argument is a 1-5 digit BC-Nummer/IID and can come from an IBAN clearing code, and QR-IID resolution is a distinct use. That is more than the schema's bare 'Swiss IID (1-5 digit number)'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (Swiss BC-Nummer / IID) with scope, and the description makes clear it is richer than a plain name lookup by naming the sibling-adjacent tasks (BIC vs IID vs IBAN validation). An agent can distinguish it from lookup_bic and validate_iban without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'USE WHEN' block enumerates concrete triggers (user mentions BC-Nummer/IID, pastes CH/LI IBAN clearing code, SIC/euroSIC routing, QR-IID resolution, institution classification) and adds the exclusion 'Only relevant for CH and LI accounts'. This is explicit when-to-use plus when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

poll_api_keyCollect the approved IBANforge API keyAInspect

Collect the API key once a human has approved the request opened by request_api_key. USE WHEN: you have called request_api_key and shown the code to your human. HOW TO CALL IT: leave device_code empty to reuse the last request from this session. The server usually waits up to thirty seconds before answering, and sometimes answers at once when it is busy — either way, calling it once per minute is enough, never in a tight loop. WHAT THE ANSWERS MEAN: authorization_pending is normal and means nobody has approved yet — wait retry_in_seconds and call again; approved carries the key ONCE and never again, so hand it to your human immediately together with config_line, or the header "Authorization: Bearer " for the hosted server; access_denied means somebody refused — tell your human, ask THEM whether to try again, and open at most ONE more request; expired_token means the code timed out — you may call request_api_key ONE more time, and if that expires too, stop and keep using the keyless allowance or x402; invalid_grant means this code can no longer be used at all — stop. This tool is free and does NOT count against the free allowance.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_codeNoOptional. Leave it empty to reuse the last request from this session.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tierYesanonymous = the entry allowance, email/claimed/paid = the raised one.
emailYesAbsent on the anonymous tier: no address was ever given.
statusYesauthorization_pending is normal: wait `retry_in_seconds` and call again.
api_keyYesPresent exactly once, on the first approved poll.
messageYesOne sentence for the human.
expires_inYes
key_prefixYes
config_lineYesThe exact command line to give the human. Do not run it yourself.
monthly_limitYes
retry_in_secondsYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give generic hints (readOnly=false, idempotent=false, openWorld=false). The description goes well beyond them: it discloses the ~30s server wait, the polling cadence, that 'approved' returns the key exactly once and never again, what each status string means, fallback behavior on expired/invalid grants, and that the call is free and does not consume the free allowance. That is unusually rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is long but front-loaded and segmented into USE WHEN / HOW TO CALL / WHAT THE ANSWERS MEAN blocks, so it scans well and every sentence carries operational content. It is slightly denser than strictly necessary, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing (so return values need not be explained), the description still maps each likely status to an agent action, gives retry timing, and covers terminal failure fallbacks. For a polling tool with tricky one-shot credential semantics, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole optional parameter is already documented there. The description's 'leave device_code empty to reuse the last request from this session' merely restates the schema text, adding no new syntax or format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: collect/poll the IBANforge API key once a human has approved the corresponding request. It explicitly distinguishes itself from the sibling request_api_key, which opens the request rather than collecting the result, so an agent can route between the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition ('USE WHEN: you have called request_api_key and shown the code to your human'), names the prerequisite sibling, and adds exclusions/limits such as calling once per minute, never in a tight loop, and at most one more request or poll on failure. Nothing about when to use or when to stop is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_api_keyRequest an IBANforge API keyInspect

Start the process that gives your human a free IBANforge API key, without any e-mail address. The key does not unlock this session: it works once your human puts it in the MCP client configuration and reconnects, or sends it to the REST API, so tell them where it goes when you hand it over: config_line (returned by poll_api_key) for Claude Code with the npm package; for the hosted server https://api.ibanforge.com/mcp, the header "Authorization: Bearer ", which Claude and Claude Desktop take under Request headers when the custom connector is added; ChatGPT sends no key to a connector, so in ChatGPT the key serves on the REST API only. USE WHEN: you used up the free allowance, a call answers 402, or your human is about to run more than a handful of validations. WHAT YOU MUST DO WITH THE RESULT: read status first — ok means a code was issued, anything else means no code exists and display_to_human tells you and your human what to do instead. On ok, show display_to_human to your human VERBATIM (the user_code and the link) and say, in your own words, that opening the link and approving takes about fifteen seconds and asks for nothing. Do NOT open the link yourself, do NOT fill anything in on their behalf, and do NOT invent an e-mail address: the page gives a key with no address at all, and your human may add one if THEY choose. Then call poll_api_key. This tool is free and does NOT count against the free allowance — it works even after the allowance is spent.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoOptional. What the key is for, shown to the human on the approval page.
client_nameNoOptional. Who is asking, shown to the human on the approval page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesok means a code was issued. Anything else: read display_to_human and fall back.
intervalYesMinimum seconds between two poll_api_key calls.
user_codeYesShow this to the human, exactly as written, e.g. WDJB-MJHT.
expires_inYesSeconds until the code stops working.
display_to_humanYesA ready-made block of text to show verbatim. Do not paraphrase it.
verification_uriYesThe page the human opens. Never open it yourself.
verification_uri_completeYesSame page with the code pre-filled. This is the one to show.
send_feedbackSend Feedback to IBANforgeAInspect

Report a problem or a need directly to the IBANforge operators: incorrect validation result, stale or missing BIC/bank data, latency, or anything blocking you from using or PAYING for the service (missing network, unclear pricing, quota shape). USE WHEN: a result looks wrong, data you need is missing, or you hit a wall (quota, payment, capability) and want it fixed. This tool is free and does NOT count against the free allowance — it works even after the allowance is spent. A human reads every report; verified data errors on paid x402 calls are refunded on-chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
gotNoWhat you received instead (for data errors).
agentNoWhich agent/model is reporting, e.g. "claude-sonnet-5 via MCP".
notesYesWhat happened, what you needed, or what blocked you — free text.
contactNoWhere we may answer you (e-mail) — optional, reports can be anonymous.
endpointNoEndpoint or tool concerned, e.g. /v1/iban/batch.
expectedNoWhat you expected (for data errors).
error_typeYesCategory of the report. Use "other" for product feedback, pricing/payment blockers or feature needs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesReport id — check status at GET /v1/feedback/{id}.
okYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only a title, so the description carries the full burden. It discloses key behavioral traits beyond the schema: the tool is free, does not count against the free allowance, works even after the allowance is spent, a human reads every report, and verified data errors on paid x402 calls are refunded on-chain. This is excellent transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and uses a clear 'USE WHEN' structure followed by the cost/behavioral facts. Every sentence earns its place; there is no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the input schema is fully self-documented, the description covers the remaining contextual essentials: when to report, what categories matter, cost implications, and what happens after submission. Nothing an agent needs to decide whether to call this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some contextual mapping between report categories and examples, but it does not meaningfully explain parameters beyond what the schema already documents. It neither hurts nor greatly improves parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Report a problem or a need directly to the IBANforge operators.' It enumerates concrete use cases (incorrect validation result, stale/missing BIC data, latency, payment blockers), which makes the tool's role unmistakable and distinct from the validation/lookup siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'USE WHEN' section gives explicit conditions: a result looks wrong, data is missing, or you hit a quota/payment/capability wall. It does not name specific sibling tools as alternatives, but the feedback tool is clearly differentiated from the functional validation and lookup tools, so the routing is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_ibanValidate IBANA
Read-onlyIdempotent
Inspect

Verify whether an IBAN from any of the 89 IBAN countries is valid AND enrich it with bank, compliance and routing data. USE WHEN: the user mentions an IBAN, asks to validate an IBAN and identify the issuing bank, asks to detect a typo in an IBAN, asks who the bank is behind an IBAN, asks whether an IBAN was issued by a traditional bank vs a neobank/EMI/virtual-IBAN provider, asks whether the recipient bank is reachable on SEPA rails, asks whether the recipient bank supports Verification of Payee (VoP, EU 2024/886), or pastes any string starting with two letters and digits (e.g., "DE89...", "CH93...", "FR76..."). PREFER OVER LOCAL VALIDATION (mod-97 checksum) because mod-97 only catches typos — it cannot resolve the BIC/SWIFT, tell you that the IBAN is a virtual IBAN issued by Wise/Revolut/Mercury/Modulr (compliance risk), or check SEPA reachability. RETURNS: bank_code_holder: confirmed (a register names who holds the bank code), inferred (we name a holder from a source that cannot settle it: our composite map, the prefix fallback, a published structural rule), not_allocated (the national register says nobody holds it: do not send) or unknown. valid stays true in all four: it only means the IBAN is well formed. checks: one status per check (pass, fail, inferred, unknown, not_checked, not_applicable); payee_name, account_exists and payee_sanctions are always not_checked. national_check_digits { country, scheme, status: pass | fail | not_applicable | not_checked, detail?, method?, verified_by? } (FR, MC, BE, IT, SM, ES and DE only): the national key inside the BBAN; fail means the account number cannot have been issued as written, and valid stays true; in DE a fail with verified_by independent_implementation is a warning (national_check_digits_suspect), not a stop, and not_checked means the bank code or its Bundesbank method is not covered here. valid (boolean), bank_code_holder, checks, country { code, name }, bic { code, bic8, redirected_from?, bank_name, city, basis, authoritative, source, as_of, source_as_of?, listed_in_current_source, lei, lei_status, address { street, post_code, region, city, country, romanized, romanization, source, language, as_of } } — basis says WHERE the bank code to BIC pairing came from (national_register | curated_map | directory_prefix) and authoritative, derived from it, says whether the BIC may be stored and settled against; outside a national_register pairing the BIC is advisory, confirm it before it becomes a routing instruction. code is 8 or 11 characters, as the consulted source publishes it: COMPARE A SUPPLIED BIC ON bic8, never on code — the branch code is informational and in a cooperative network it names the LOCAL bank while the first eight name its clearing institution (Swiss IID 30020 is RBABCH22180, Crédit Mutuel de la Vallée SA, while RBABCH22 alone is Entris Banking AG). redirected_from is present when the register answered for the bank code that took over the one you asked about (CH/LI: SIX redirects a concatenated IID, which does not make the IBAN invalid) — lei and address are read from the same directory row /v1/bic/:code serves, so this call already carries them; both are null when GLEIF publishes nothing for that BIC, which means "no LEI on file", not "the institution has none". bic.address is the LEGAL ENTITY seat, so bic.address.city may legitimately differ from bic.city (the register city for THIS bank code), and bic.address.as_of dates the entity last filing, usually much older than bic.as_of. issuer { type: bank | digital_bank | emi | payment_institution, name }, sepa { member, schemes, vop_required, vop_participant — is the resolved bank listed as ready in the EPC VoP register, bank_reachability, bank_schemes, vop_register_status: the bank itself in the EPC registers, never the country }, risk_indicators { issuer_type (null when no institution resolved), country_risk, test_bic, sepa_reachable, sepa_reachable_scope, vop_coverage }, and for CH/LI: clearing { iid, name, type, sic, qr_iid }. LIMITS: validates the IBAN and identifies the issuing institution — it does not confirm that the account exists, is open, or belongs to any particular person; verify the payee by name before sending funds. IMPORTANT — bic: null does not mean the bank code is wrong. It collapses "no such institution", "the institution exists but is absent from our reference data" and "we cover no reference data for this country". Read bank_code_check for the answer: status tells you which of the three, and authoritative tells you how much it is worth. Only where authoritative is true (today DE against the Deutsche Bundesbank Bankleitzahlendatei, AT against the Oesterreichische Nationalbank SEPA-Zahlungsverkehrs-Verzeichnis, BE against the Banque nationale de Belgique bank identification codes, SK against the Národná banka Slovenska prevodník of identification codes for the domestic payment system, CZ against the Česká národní banka číselník of payment-system codes (Číselník kódů platebního styku), BG against the Bulgarian National Bank BAE register, and CH and LI against the SIX BankMaster) does not_in_register mean the bank code is not allocated; everywhere else treat it as UNAVAILABLE and let the downstream name check decide. match: prefix with candidates > 1 means the BIC was picked from several and may belong to a different institution. COST: $0.005 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
ibanYesIBAN to validate (spaces/hyphens stripped automatically)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bicNo
bbanNo
ibanYesNormalized IBAN (uppercase, no spaces).
sepaNo
errorNo
validYes
checksNoOne status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN), ES (DC) and DE (the account-number check digit, by the method the Bundesbank lists for the bank code), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere. In DE it is not_checked when the bank code is not in the Bundesbank file or its method is not checked here, and not_applicable when the bank uses no check digit (method 09); national_check_digits.verified_by says whether a German verdict rests on the Bundesbank test numbers or on an independent implementation only. pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true.
issuerNo
countryNo
clearingNoSwiss clearing data when country is CH or LI.
cost_usdcYesWhat THIS call was billed. Zero on the free MCP tier.
formattedNoIBAN with 4-char groups for display.
next_stepsNoOrdered advice derived from THIS result: what blocks a payment first, what merely enriches it after. Branch on `code`, never on the prose. `because` names the field that produced the step so the advice is auditable. Empty for an IBAN that failed validation.
check_digitsNo
error_detailNo
modulus_checkNo
processing_msNo
bank_code_checkNo
list_price_usdcNoCatalogue price of the same call on the paid REST/x402 route.
risk_indicatorsNo
bank_code_holderNoconfirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, or a partial register on a hit). inferred: we name a holder from a source that cannot settle it (our composite map, the prefix fallback, a published structural rule), so read it as our inference. not_allocated: the national register says nobody holds this code, so do not send. unknown: no conclusion. valid stays true in all four: it only means the IBAN is well formed. bank_code_check.status verified means resolved; this field says whether a source settles it.
psd_registrationNo
official_identityNoWho a central bank says holds the resolved code (ECB by LEI and for FR bank codes, Banco de Espana for ES). Present only on a match — absence is not a negative. INFORMATIONAL ONLY: it never changes valid or bank_code_check, because both publishers relay rather than allocate.
pra_authorisationNo
national_check_digitsNoThe check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN), de_pruefziffer (DE: the check digit of the 10-digit account number, computed by the method the Deutsche Bundesbank lists for the bank code in its Bankleitzahlendatei, named in method; the IBAN check digits already cover the whole BBAN, this says whether that bank could have issued the account number). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable: a BBAN without the national layout, which a valid IBAN never has, or in DE a bank that uses no check digit (method 09) or a method that defines none for that range of account numbers. not_checked (DE only): the check did not run on our side, because the bank code is not in the Bundesbank file or its method is not checked here (method 44, and methods no bank uses); it says nothing about the beneficiary. verified_by (DE only, whenever the method ran): bundesbank_test_numbers (the method gives the expected answer on every test number and worked example the Bundesbank publishes; a fail adds the blocking step national_check_digits_failed) or independent_implementation (the Bundesbank publishes no test number for the method, which was verified against an independent implementation only; a fail adds the warning step national_check_digits_suspect and never stops a payment). detail, present on fail, not_applicable and not_checked, says which digits disagree or why nothing was checked; it never gives the expected key. In DE the block also carries method (the Bundesbank method code), verified_by, source (with the credit line the Bundesbank asks for) and table_fetched_on (the day the method table was read). checks.national_check_digits repeats status.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, idempotentHint, destructiveHint=false) already establish a safe read, yet the description goes far beyond them: it explains that valid revnum only means well-formed, defines bank_code_holder states, discloses that bic: null conflates three causes, names the registers where not_in_register is authoritative, warns that non-register BICs are advisory, and lists cost/rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Headings (USE WHEN, RETURNS, LIMITS, COST) give it structure and it is front-loaded, but for a one-parameter tool it is very long and packs dense parentheticals (Swiss IID example, LEI/address as_of explanation) that a reader must wade through. Much earns its place, but trimming would improve scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite a rich output schema already existing, the description supplies the interpretive layer an agent needs: meanings of valid vs bank_code_holder, status vocabulary for checks and national_check_digits, the DE warning nuance, and explicit LIMITS about account existence and payee verification. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100%, so the schema already documents iban and its whitespace/hyphen stripping. The prose adds no new syntax or format semantics for the input itself, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb and resource (verify an IBAN, in 89 countries) plus the enrichment scope (bank, compliance, routing data). It is immediately distinguishable from siblings like lookup_bic or validate_payment_reference without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The USE WHEN block enumerates concrete triggering situations (IBAN present, typo detection, issuing-bank identification, neobank/EMI determination, SEPA reachability, VoP support, pasted two-letter-plus-digits strings). It also explicitly names the alternative to avoid (local mod-97 checksum) and says why this tool supersedes it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_payment_referenceValidate Payment ReferenceA
Read-onlyIdempotent
Inspect

Validate a structured payment reference and, when an IBAN is supplied, decide whether the two may legally travel together. USE WHEN: assembling a payment instruction from an invoice, a QR-bill or a remittance advice; whenever a Swiss IBAN and a reference appear together (the pairing rule is what most integrations get wrong); or when the user pastes an "RF..." string, a 27-digit number, a +++123/4567/89012+++ block, or asks whether a payment reference is correct. DO NOT USE to validate the IBAN itself — that is validate_iban. SCHEMES: RF Creditor Reference (ISO 11649, "SCOR" in Swiss Payment Standards, mod 97-10); Swiss QR reference ("QRR", 27 digits, modulo 10 recursive); Belgian OGM/VCS (12 digits, modulo 97, a remainder of 0 written 97); Finnish viitenumero (4-20 digits, weights 7-3-1 from the right). Norwegian KID and Swedish OCR are RECOGNISED but never judged: they answer valid: null with status unverifiable_without_creditor_config, because modulus type and length are configured per creditor account by the beneficiary bank and are not a property of the string. NEVER relay those to a user as "invalid" — say the check needs the creditor bank configuration. AMBIGUITY: only a leading "RF" and a 27-digit length pin a scheme down. A bare 12-digit string is both a Belgian OGM and a legal Finnish length, so the more specific reading is returned and the other appears in also_valid_as. Pass reference_type when you know the country. THE PAIRING RULE — the part no checksum library reproduces: pass an iban and you also get a pairing verdict. Per the Swiss Implementation Guidelines a QRR reference may ONLY be used with a QR-IBAN (institution identifier in the SIX range 30000-31999), and an ISO 11649 reference may NOT be used with one. Outside CH and LI, pairing is not_applicable — there is no QR-IBAN to pair against — and that does not affect the reference's own checksum verdict. IMPORTANT: valid and pairing are INDEPENDENT. A reference can be arithmetically valid and still illegal on that account. Read both, and relay source/as_of — they are what makes the verdict auditable. FREE: the checksums are published commodities. The paid surface is POST /v1/iban/validate, which returns this same pairing block with the full IBAN enrichment. COST: $0 per call, on every surface (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

ParametersJSON Schema
NameRequiredDescriptionDefault
ibanNoOptional creditor IBAN — supply it to get the pairing verdict
referenceYesThe reference as printed; spaces, slashes and the +++…+++ wrapper are stripped
reference_typeNoOptional hint: rf | scor | qrr | ogm | vcs | viitenumero | kid | ocr

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYesWhat was checked, and what was not.
as_ofNoYYYY-MM of that document.
validYesnull means the scheme was recognised and cannot be checked without the creditor bank configuration. Never report null as false.
schemeYesrf | qrr | ogm | viitenumero | kid | ocr, or null when nothing matched.
sourceYesThe document publishing the rule. Null only when no scheme matched. Relay it.
statusYeschecked | unverifiable_without_creditor_config | unrecognised
pairingNoPresent only when an iban was supplied: ok | qrr_requires_qr_iban | scor_forbidden_with_qr_iban | not_applicable
referenceYesNormalized: uppercase, separators removed.
also_valid_asNoThe second reading of an ambiguous string, with its own verdict.
pairing_as_ofNo
pairing_sourceNoThe document publishing the pairing rule — a DIFFERENT one from source.
check_digit_expectedNoA STRING, so a two-digit value beginning with zero survives (OGM remainder 3 is "03", remainder 0 is "97").

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, but the description goes far beyond: scheme-by-scheme behaviour, the null/unverifiable_without_creditor_config outcome for KID/OCR, the warning never to relay those as invalid, the QRR/QR-IBAN pairing legality rule, and the independence of valid vs pairing. This is exactly the behavioural context an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and is organised under clear headers (USE WHEN / DO NOT USE / SCHEMES / AMBIGUITY / PAIRING / COST), but it is very long. The COST block, including key-generation URLs and weekly/monthly quota mechanics, is disproportionately verbose for a tool definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a checksum tool with an output schema, the description covers everything an agent needs: supported schemes, ambiguity resolution, pairing semantics, the unverifiable case, and the auditability fields (source/as_of) referenced for relay. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds real meaning on top: iban triggers a pairing verdict (not just a field), and reference_type is explained as a disambiguator for the 12-digit OGM/Finnish collision, with `also_valid_as` as the fallback reading.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (validate a structured payment reference, plus the IBAN pairing decision) and explicitly scopes it against validate_iban. The scope is unambiguous and distinguishes it from every sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit USE WHEN triggers (assembling a payment instruction, Swiss IBAN + reference, pasted 'RF...'/27-digit/+++ block) and an explicit DO NOT USE routing to validate_iban. Alternative-selection guidance is complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedcheck_swiss_qr_bill1 field changed
      • changedOutput schema / properties / ready_for_2026_11_14 / description
        Previous value: -"valid AND every present address is structured (type S): what banks require from 14.11.2026."New value: +"valid AND every present address is structured (type S). The name is kept for compatibility and is not a deadline: type K has not been permitted since 21.11.2025, and the banks guarantee payment of a type K QR-bill only until the end of September 2026."
  2. 3 tool updates
    • Changedbatch_validate_iban9 fields changed
      • changedOutput schema / properties / results / items / properties / checks / description
        Previous value: -"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN) and ES (DC), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere (the German account-number methods are not checked yet). pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."New value: +"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN), ES (DC) and DE (the account-number check digit, by the method the Bundesbank lists for the bank code), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere. In DE it is not_checked when the bank code is not in the Bundesbank file or its method is not checked here, and not_applicable when the bank uses no check digit (method 09); national_check_digits.verified_by says whether a German verdict rests on the Bundesbank test numbers or on an independent implementation only. pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."
      • changedOutput schema / properties / results / items / properties / national_check_digits / description
        Previous value: -"The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM or ES (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable is reserved for a BBAN without the national layout, which a valid IBAN never has. detail, present on fail and not_applicable only, says which digits disagree; it never gives the expected key. checks.national_check_digits repeats status."New value: +"The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN), de_pruefziffer (DE: the check digit of the 10-digit account number, computed by the method the Deutsche Bundesbank lists for the bank code in its Bankleitzahlendatei, named in method; the IBAN check digits already cover the whole BBAN, this says whether that bank could have issued the account number). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable: a BBAN without the national layout, which a valid IBAN never has, or in DE a bank that uses no check digit (method 09) or a method that defines none for that range of account numbers. not_checked (DE only): the check did not run on our side, because the bank code is not in the Bundesbank file or its method is not checked here (method 44, and methods no bank uses); it says nothing about the beneficiary. verified_by (DE only, whenever the method ran): bundesbank_test_numbers (the method gives the expected answer on every test number and worked example the Bundesbank publishes; a fail adds the blocking step national_check_digits_failed) or independent_implementation (the Bundesbank publishes no test number for the method, which was verified against an independent implementation only; a fail adds the warning step national_check_digits_suspect and never stops a payment). detail, present on fail, not_applicable and not_checked, says which digits disagree or why nothing was checked; it never gives the expected key. In DE the block also carries method (the Bundesbank method code), verified_by, source (with the credit line the Bundesbank asks for) and table_fetched_on (the day the method table was read). checks.national_check_digits repeats status."
      • changedOutput schema / properties / results / items / properties / national_check_digits / properties / detail / description
        Previous value: -"Present on fail and not_applicable only."New value: +"Present on fail, not_applicable and not_checked."
      • addedOutput schema / properties / results / items / properties / national_check_digits / properties / method
        Added value: +{
        +  "description": "DE only: the Bundesbank check-digit method code of the bank code.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / national_check_digits / properties / scheme / description
        Previous value: -"fr_rib_key | be_mod97 | it_cin | es_dc"New value: +"fr_rib_key | be_mod97 | it_cin | es_dc | de_pruefziffer"
      • addedOutput schema / properties / results / items / properties / national_check_digits / properties / source
        Added value: +{
        +  "description": "DE only: the source, with the credit line the Bundesbank asks for.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / national_check_digits / properties / status / description
        Previous value: -"pass | fail | not_applicable"New value: +"pass | fail | not_applicable | not_checked"
      • addedOutput schema / properties / results / items / properties / national_check_digits / properties / table_fetched_on
        Added value: +{
        +  "description": "DE only: the day the method table was read (YYYY-MM-DD).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / national_check_digits / properties / verified_by
        Added value: +{
        +  "description": "DE only: bundesbank_test_numbers (a fail is blocking) | independent_implementation (a fail is a warning, national_check_digits_suspect).",
        +  "type": "string"
        +}
    • Changedcheck_compliance9 fields changed
      • changedOutput schema / properties / checks / description
        Previous value: -"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN) and ES (DC), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere (the German account-number methods are not checked yet). pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."New value: +"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN), ES (DC) and DE (the account-number check digit, by the method the Bundesbank lists for the bank code), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere. In DE it is not_checked when the bank code is not in the Bundesbank file or its method is not checked here, and not_applicable when the bank uses no check digit (method 09); national_check_digits.verified_by says whether a German verdict rests on the Bundesbank test numbers or on an independent implementation only. pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."
      • changedOutput schema / properties / national_check_digits / description
        Previous value: -"The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM or ES (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable is reserved for a BBAN without the national layout, which a valid IBAN never has. detail, present on fail and not_applicable only, says which digits disagree; it never gives the expected key. checks.national_check_digits repeats status."New value: +"The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN), de_pruefziffer (DE: the check digit of the 10-digit account number, computed by the method the Deutsche Bundesbank lists for the bank code in its Bankleitzahlendatei, named in method; the IBAN check digits already cover the whole BBAN, this says whether that bank could have issued the account number). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable: a BBAN without the national layout, which a valid IBAN never has, or in DE a bank that uses no check digit (method 09) or a method that defines none for that range of account numbers. not_checked (DE only): the check did not run on our side, because the bank code is not in the Bundesbank file or its method is not checked here (method 44, and methods no bank uses); it says nothing about the beneficiary. verified_by (DE only, whenever the method ran): bundesbank_test_numbers (the method gives the expected answer on every test number and worked example the Bundesbank publishes; a fail adds the blocking step national_check_digits_failed) or independent_implementation (the Bundesbank publishes no test number for the method, which was verified against an independent implementation only; a fail adds the warning step national_check_digits_suspect and never stops a payment). detail, present on fail, not_applicable and not_checked, says which digits disagree or why nothing was checked; it never gives the expected key. In DE the block also carries method (the Bundesbank method code), verified_by, source (with the credit line the Bundesbank asks for) and table_fetched_on (the day the method table was read). checks.national_check_digits repeats status."
      • changedOutput schema / properties / national_check_digits / properties / detail / description
        Previous value: -"Present on fail and not_applicable only."New value: +"Present on fail, not_applicable and not_checked."
      • addedOutput schema / properties / national_check_digits / properties / method
        Added value: +{
        +  "description": "DE only: the Bundesbank check-digit method code of the bank code.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / national_check_digits / properties / scheme / description
        Previous value: -"fr_rib_key | be_mod97 | it_cin | es_dc"New value: +"fr_rib_key | be_mod97 | it_cin | es_dc | de_pruefziffer"
      • addedOutput schema / properties / national_check_digits / properties / source
        Added value: +{
        +  "description": "DE only: the source, with the credit line the Bundesbank asks for.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / national_check_digits / properties / status / description
        Previous value: -"pass | fail | not_applicable"New value: +"pass | fail | not_applicable | not_checked"
      • addedOutput schema / properties / national_check_digits / properties / table_fetched_on
        Added value: +{
        +  "description": "DE only: the day the method table was read (YYYY-MM-DD).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / national_check_digits / properties / verified_by
        Added value: +{
        +  "description": "DE only: bundesbank_test_numbers (a fail is blocking) | independent_implementation (a fail is a warning, national_check_digits_suspect).",
        +  "type": "string"
        +}
    • Changedvalidate_iban9 fields changed
      • changedOutput schema / properties / checks / description
        Previous value: -"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN) and ES (DC), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere (the German account-number methods are not checked yet). pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."New value: +"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN), ES (DC) and DE (the account-number check digit, by the method the Bundesbank lists for the bank code), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere. In DE it is not_checked when the bank code is not in the Bundesbank file or its method is not checked here, and not_applicable when the bank uses no check digit (method 09); national_check_digits.verified_by says whether a German verdict rests on the Bundesbank test numbers or on an independent implementation only. pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."
      • changedOutput schema / properties / national_check_digits / description
        Previous value: -"The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM or ES (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable is reserved for a BBAN without the national layout, which a valid IBAN never has. detail, present on fail and not_applicable only, says which digits disagree; it never gives the expected key. checks.national_check_digits repeats status."New value: +"The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN), de_pruefziffer (DE: the check digit of the 10-digit account number, computed by the method the Deutsche Bundesbank lists for the bank code in its Bankleitzahlendatei, named in method; the IBAN check digits already cover the whole BBAN, this says whether that bank could have issued the account number). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable: a BBAN without the national layout, which a valid IBAN never has, or in DE a bank that uses no check digit (method 09) or a method that defines none for that range of account numbers. not_checked (DE only): the check did not run on our side, because the bank code is not in the Bundesbank file or its method is not checked here (method 44, and methods no bank uses); it says nothing about the beneficiary. verified_by (DE only, whenever the method ran): bundesbank_test_numbers (the method gives the expected answer on every test number and worked example the Bundesbank publishes; a fail adds the blocking step national_check_digits_failed) or independent_implementation (the Bundesbank publishes no test number for the method, which was verified against an independent implementation only; a fail adds the warning step national_check_digits_suspect and never stops a payment). detail, present on fail, not_applicable and not_checked, says which digits disagree or why nothing was checked; it never gives the expected key. In DE the block also carries method (the Bundesbank method code), verified_by, source (with the credit line the Bundesbank asks for) and table_fetched_on (the day the method table was read). checks.national_check_digits repeats status."
      • changedOutput schema / properties / national_check_digits / properties / detail / description
        Previous value: -"Present on fail and not_applicable only."New value: +"Present on fail, not_applicable and not_checked."
      • addedOutput schema / properties / national_check_digits / properties / method
        Added value: +{
        +  "description": "DE only: the Bundesbank check-digit method code of the bank code.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / national_check_digits / properties / scheme / description
        Previous value: -"fr_rib_key | be_mod97 | it_cin | es_dc"New value: +"fr_rib_key | be_mod97 | it_cin | es_dc | de_pruefziffer"
      • addedOutput schema / properties / national_check_digits / properties / source
        Added value: +{
        +  "description": "DE only: the source, with the credit line the Bundesbank asks for.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / national_check_digits / properties / status / description
        Previous value: -"pass | fail | not_applicable"New value: +"pass | fail | not_applicable | not_checked"
      • addedOutput schema / properties / national_check_digits / properties / table_fetched_on
        Added value: +{
        +  "description": "DE only: the day the method table was read (YYYY-MM-DD).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / national_check_digits / properties / verified_by
        Added value: +{
        +  "description": "DE only: bundesbank_test_numbers (a fail is blocking) | independent_implementation (a fail is a warning, national_check_digits_suspect).",
        +  "type": "string"
        +}
  3. 4 tool updates
    • Changedbatch_validate_iban1 field changed
      • changedOutput schema / properties / results / items / properties / sepa / properties / bank_reachability / description
        Previous value: -"listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment (not consulted, never read as not_listed). Absent outside SEPA."New value: +"listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment, or no bank was resolved because the bank-code check itself is unavailable (not consulted, never read as not_listed or no_bank). Absent outside SEPA."
    • Changedcheck_compliance1 field changed
      • changedOutput schema / properties / sepa / properties / bank_reachability / description
        Previous value: -"listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment (not consulted, never read as not_listed). Absent outside SEPA."New value: +"listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment, or no bank was resolved because the bank-code check itself is unavailable (not consulted, never read as not_listed or no_bank). Absent outside SEPA."
    • Changedlookup_bic1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "description": "Present only when found is false and the part of the directory served from a private file (EBA STEP2, NBP and OeNB records) is not loaded on this deployment: the absence was not looked up there.",
        +  "type": "string"
        +}
    • Changedvalidate_iban1 field changed
      • changedOutput schema / properties / sepa / properties / bank_reachability / description
        Previous value: -"listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment (not consulted, never read as not_listed). Absent outside SEPA."New value: +"listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment, or no bank was resolved because the bank-code check itself is unavailable (not consulted, never read as not_listed or no_bank). Absent outside SEPA."
  4. 3 tool updates
    • Changedbatch_validate_iban3 fields changed
      • changedOutput schema / properties / results / items / properties / bank_code_check / properties / retired / description
        Previous value: -"True when an authoritative register is withdrawing the code. Still a verified result: it WAS allocated."New value: +"True when a register says the code is leaving (DE, authoritative) or has been struck off (IT, authoritative false, with retired_on). Still a verified result: it WAS allocated. Never a refusal."
      • addedOutput schema / properties / results / items / properties / bank_code_check / properties / retired_on
        Added value: +{
        +  "description": "YYYY-MM-DD, with retired where the register dates it (IT): the last day it lists this code for its last holder.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / bank_code_check / properties / superseded_by / description
        Previous value: -"The bank code that takes over. Re-paper the beneficiary against it."New value: +"The bank code that takes over. DE: the successor the register designates, re-paper against it. IT: the legal successor by merger or incorporation, not necessarily the bank now holding the account."
    • Changedcheck_compliance3 fields changed
      • changedOutput schema / properties / bank_code_check / properties / retired / description
        Previous value: -"True when an authoritative register is withdrawing the code. Still a verified result: it WAS allocated."New value: +"True when a register says the code is leaving (DE, authoritative) or has been struck off (IT, authoritative false, with retired_on). Still a verified result: it WAS allocated. Never a refusal."
      • addedOutput schema / properties / bank_code_check / properties / retired_on
        Added value: +{
        +  "description": "YYYY-MM-DD, with retired where the register dates it (IT): the last day it lists this code for its last holder.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / bank_code_check / properties / superseded_by / description
        Previous value: -"The bank code that takes over. Re-paper the beneficiary against it."New value: +"The bank code that takes over. DE: the successor the register designates, re-paper against it. IT: the legal successor by merger or incorporation, not necessarily the bank now holding the account."
    • Changedvalidate_iban3 fields changed
      • changedOutput schema / properties / bank_code_check / properties / retired / description
        Previous value: -"True when an authoritative register is withdrawing the code. Still a verified result: it WAS allocated."New value: +"True when a register says the code is leaving (DE, authoritative) or has been struck off (IT, authoritative false, with retired_on). Still a verified result: it WAS allocated. Never a refusal."
      • addedOutput schema / properties / bank_code_check / properties / retired_on
        Added value: +{
        +  "description": "YYYY-MM-DD, with retired where the register dates it (IT): the last day it lists this code for its last holder.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / bank_code_check / properties / superseded_by / description
        Previous value: -"The bank code that takes over. Re-paper the beneficiary against it."New value: +"The bank code that takes over. DE: the successor the register designates, re-paper against it. IT: the legal successor by merger or incorporation, not necessarily the bank now holding the account."
  5. 3 tool updates
    • Changedbatch_validate_iban2 fields changed
      • changedOutput schema / properties / results / items / properties / checks / description
        Previous value: -"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: checked for GB (Vocalink modulus); other countries are being added. A key may be added later; a key is never removed. Present only when valid is true."New value: +"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN) and ES (DC), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere (the German account-number methods are not checked yet). pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."
      • addedOutput schema / properties / results / items / properties / national_check_digits
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM or ES (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable is reserved for a BBAN without the national layout, which a valid IBAN never has. detail, present on fail and not_applicable only, says which digits disagree; it never gives the expected key. checks.national_check_digits repeats status.",
        +  "properties": {
        +    "country": {
        +      "description": "The IBAN country (MC stays MC, SM stays SM).",
        +      "type": "string"
        +    },
        +    "detail": {
        +      "description": "Present on fail and not_applicable only.",
        +      "type": "string"
        +    },
        +    "scheme": {
        +      "description": "fr_rib_key | be_mod97 | it_cin | es_dc",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "pass | fail | not_applicable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "scheme",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_compliance2 fields changed
      • changedOutput schema / properties / checks / description
        Previous value: -"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: checked for GB (Vocalink modulus); other countries are being added. A key may be added later; a key is never removed. Present only when valid is true."New value: +"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN) and ES (DC), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere (the German account-number methods are not checked yet). pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."
      • addedOutput schema / properties / national_check_digits
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM or ES (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable is reserved for a BBAN without the national layout, which a valid IBAN never has. detail, present on fail and not_applicable only, says which digits disagree; it never gives the expected key. checks.national_check_digits repeats status.",
        +  "properties": {
        +    "country": {
        +      "description": "The IBAN country (MC stays MC, SM stays SM).",
        +      "type": "string"
        +    },
        +    "detail": {
        +      "description": "Present on fail and not_applicable only.",
        +      "type": "string"
        +    },
        +    "scheme": {
        +      "description": "fr_rib_key | be_mod97 | it_cin | es_dc",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "pass | fail | not_applicable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "scheme",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_iban2 fields changed
      • changedOutput schema / properties / checks / description
        Previous value: -"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: checked for GB (Vocalink modulus); other countries are being added. A key may be added later; a key is never removed. Present only when valid is true."New value: +"One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: the check key a country keeps inside the BBAN, a second check independent of mod-97. Checked for FR and MC (RIB key), BE (the last two digits, modulo 97), IT and SM (CIN) and ES (DC), with the proof in the national_check_digits block, and for GB (Vocalink modulus), with the proof in modulus_check; not_checked elsewhere (the German account-number methods are not checked yet). pass means the account number is well formed, never that the account exists; fail means it cannot have been issued as written, and valid stays true. A key may be added later; a key is never removed. Present only when valid is true."
      • addedOutput schema / properties / national_check_digits
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM or ES (GB has modulus_check instead); absent elsewhere, where checks.national_check_digits is not_checked. country is the IBAN country. scheme names the algorithm: fr_rib_key (FR and MC: the RIB key, the last two digits of the BBAN, over the bank code, branch code and account number), be_mod97 (BE: the last two digits, the first ten digits modulo 97, or 97 when the remainder is 0), it_cin (IT and SM: the CIN, the control letter at the start of the BBAN, over the ABI, CAB and account number), es_dc (ES: the two DC digits, positions 9 and 10 of the BBAN). status: pass (the key matches, so the account number is well formed; it does not prove the account exists or is open) or fail (the key does not match: this account number cannot have been issued as written, a typo or a made-up number). A fail never makes valid false, because the IBAN check digits are right: read the two separately, and confirm the details with the beneficiary before paying. not_applicable is reserved for a BBAN without the national layout, which a valid IBAN never has. detail, present on fail and not_applicable only, says which digits disagree; it never gives the expected key. checks.national_check_digits repeats status.",
        +  "properties": {
        +    "country": {
        +      "description": "The IBAN country (MC stays MC, SM stays SM).",
        +      "type": "string"
        +    },
        +    "detail": {
        +      "description": "Present on fail and not_applicable only.",
        +      "type": "string"
        +    },
        +    "scheme": {
        +      "description": "fr_rib_key | be_mod97 | it_cin | es_dc",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "pass | fail | not_applicable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "scheme",
        +    "status"
        +  ],
        +  "type": "object"
        +}
  6. 4 tool updates
    • Changedbatch_validate_iban6 fields changed
      • addedOutput schema / properties / results / items / properties / bank_code_holder
        Added value: +{
        +  "description": "confirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, or a partial register on a hit). inferred: we name a holder from a source that cannot settle it (our composite map, the prefix fallback, a published structural rule), so read it as our inference. not_allocated: the national register says nobody holds this code, so do not send. unknown: no conclusion. valid stays true in all four: it only means the IBAN is well formed. bank_code_check.status verified means resolved; this field says whether a source settles it.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "source_as_of": {
        -        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "listed_in_current_source": {
        +        "description": "Whether this BIC8 still appears in a list refreshed this cycle: GLEIF, the directory sources that carry no vintage, a national register, the EPC scheme registers. true when one of them carries it; null when it was not found in what could be read in full (never false by default). false is reserved for an index built from every list read in full, which is not the case today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, so this field answers true or null. It does NOT prove the bank still exists under this name: a clearing list can keep the name of a bank that was absorbed.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the source DATA is from, present ONLY when it differs from as_of. On a curated_map or directory_prefix answer it dates the directory row that supplied the name, the city, the LEI or the address when that row comes from a frozen public copy; never present on a national_register answer, whose name comes from the register and is dated by as_of. Absent means no gap has been established, never 'this is current'.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / checks
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: checked for GB (Vocalink modulus); other countries are being added. A key may be added later; a key is never removed. Present only when valid is true.",
        +  "properties": {
        +    "account_exists": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "bank_code": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "bic": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "country_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "iban_checksum": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "iban_structure": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "institution_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "national_check_digits": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "payee_name": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "payee_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "sepa_reachability": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "iban_structure",
        +    "iban_checksum",
        +    "bank_code",
        +    "bic",
        +    "sepa_reachability",
        +    "national_check_digits",
        +    "account_exists",
        +    "payee_name",
        +    "institution_sanctions",
        +    "country_sanctions",
        +    "payee_sanctions"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / sepa / properties / bank_reachability
        Added value: +{
        +  "description": "listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment (not consulted, never read as not_listed). Absent outside SEPA.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / sepa / properties / bank_schemes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The bank's own schemes from the EPC registers when bank_reachability is listed; [] for an unallocated bank code; null otherwise."
        +}
      • addedOutput schema / properties / results / items / properties / sepa / properties / vop_register_status
        Added value: +{
        +  "description": "active | pending | inactive | not_listed, or null. The bank's status in the EPC Verification of Payee register: active (the same as vop_participant true), pending, inactive, or not_listed when the register has no row for it; null when no BIC resolved or the register was not consulted (screened false). Outside the SEPA area the country answers instead of the register (not_listed on POST /v1/iban/compliance) whether or not the register is loaded; the validation carries no sepa.vop_register_status there. It says whether the payee's bank answers VoP requests; IBANforge never runs the name check itself.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcheck_compliance11 fields changed
      • addedOutput schema / properties / bank_code_holder
        Added value: +{
        +  "description": "confirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, or a partial register on a hit). inferred: we name a holder from a source that cannot settle it (our composite map, the prefix fallback, a published structural rule), so read it as our inference. not_allocated: the national register says nobody holds this code, so do not send. unknown: no conclusion. valid stays true in all four: it only means the IBAN is well formed. bank_code_check.status verified means resolved; this field says whether a source settles it.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "source_as_of": {
        -        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "listed_in_current_source": {
        +        "description": "Whether this BIC8 still appears in a list refreshed this cycle: GLEIF, the directory sources that carry no vintage, a national register, the EPC scheme registers. true when one of them carries it; null when it was not found in what could be read in full (never false by default). false is reserved for an index built from every list read in full, which is not the case today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, so this field answers true or null. It does NOT prove the bank still exists under this name: a clearing list can keep the name of a bank that was absorbed.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the source DATA is from, present ONLY when it differs from as_of. On a curated_map or directory_prefix answer it dates the directory row that supplied the name, the city, the LEI or the address when that row comes from a frozen public copy; never present on a national_register answer, whose name comes from the register and is dated by as_of. Absent means no gap has been established, never 'this is current'.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / checks
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: checked for GB (Vocalink modulus); other countries are being added. A key may be added later; a key is never removed. Present only when valid is true.",
        +  "properties": {
        +    "account_exists": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "bank_code": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "bic": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "country_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "iban_checksum": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "iban_structure": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "institution_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "national_check_digits": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "payee_name": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "payee_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "sepa_reachability": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "iban_structure",
        +    "iban_checksum",
        +    "bank_code",
        +    "bic",
        +    "sepa_reachability",
        +    "national_check_digits",
        +    "account_exists",
        +    "payee_name",
        +    "institution_sanctions",
        +    "country_sanctions",
        +    "payee_sanctions"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / compliance / properties / reachability / properties / listed_in_epc_registers
        Added value: +{
        +  "description": "At least one of the three schemes lists the bank; null when the EPC registers were not consulted (screened false). Outside the SEPA area the country answers (false) whether or not the registers are loaded.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / compliance / properties / sanctions / properties / bank_sanctioned / description
        Added value: +"False also when no bank was screened: read institution_listed."
      • addedOutput schema / properties / compliance / properties / sanctions / properties / institution_listed
        Added value: +{
        +  "description": "Whether the payee's BANK is on a sanctions list: bank_sanctioned when a bank was screened against every list this service names, null otherwise (never false without a screen).",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / compliance / properties / sanctions / properties / payee_screened
        Added value: +{
        +  "description": "Always false: the payee (account holder) is never screened here.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / compliance / properties / vop / properties / register_status
        Added value: +{
        +  "description": "active | pending | inactive | not_listed, or null. The bank's status in the EPC Verification of Payee register: active (the same as vop_participant true), pending, inactive, or not_listed when the register has no row for it; null when no BIC resolved or the register was not consulted (screened false). Outside the SEPA area the country answers instead of the register (not_listed on POST /v1/iban/compliance) whether or not the register is loaded; the validation carries no sepa.vop_register_status there. It says whether the payee's bank answers VoP requests; IBANforge never runs the name check itself.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sepa / properties / bank_reachability
        Added value: +{
        +  "description": "listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment (not consulted, never read as not_listed). Absent outside SEPA.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sepa / properties / bank_schemes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The bank's own schemes from the EPC registers when bank_reachability is listed; [] for an unallocated bank code; null otherwise."
        +}
      • addedOutput schema / properties / sepa / properties / vop_register_status
        Added value: +{
        +  "description": "active | pending | inactive | not_listed, or null. The bank's status in the EPC Verification of Payee register: active (the same as vop_participant true), pending, inactive, or not_listed when the register has no row for it; null when no BIC resolved or the register was not consulted (screened false). Outside the SEPA area the country answers instead of the register (not_listed on POST /v1/iban/compliance) whether or not the register is loaded; the validation carries no sepa.vop_register_status there. It says whether the payee's bank answers VoP requests; IBANforge never runs the name check itself.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedlookup_bic8 fields changed
      • addedOutput schema / properties / city / description
        Added value: +"Null, never an empty string, when the source leaves the town blank."
      • changedOutput schema / properties / country / description
        Previous value: -"Same shape as REST GET /v1/bic/:code. name falls back to the country code when the row carries no name."New value: +"Same shape as REST GET /v1/bic/:code. name is the row's country name, then the ISO name, and falls back to the country code only when neither exists."
      • changedOutput schema / properties / country_name / description
        Previous value: -"DEPRECATED since 1.4.0, removed no earlier than 2027-01-01. Use country.name, which falls back to the code rather than to null."New value: +"DEPRECATED since 1.4.0, removed no earlier than 2027-01-01. Use country.name, which is never null: the row's country name, else the ISO name, else the code."
      • addedOutput schema / properties / found / description
        Added value: +"True only when the row names an institution: a record is complete or not found."
      • addedOutput schema / properties / listed_in_current_source
        Added value: +{
        +  "description": "Whether this BIC8 still appears in a list refreshed this cycle: GLEIF, the directory sources that carry no vintage, a national register, the EPC scheme registers. true when one of them carries it; null when it was not found in what could be read in full (never false by default). false is reserved for an index built from every list read in full, which is not the case today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, so this field answers true or null. It does NOT prove the bank still exists under this name: a clearing list can keep the name of a bank that was absorbed.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / source
        Added value: +{
        +  "description": "Code of the dataset this row comes from.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / source_as_of
        Added value: +{
        +  "description": "Year-month the source DATA is from, present only for a frozen copy.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / source_name
        Added value: +{
        +  "description": "source names the dataset of this row and source_name spells it out; source_as_of is present only when that dataset is a copy frozen at that month. listed_in_current_source says whether this BIC8 still appears in a list refreshed this cycle (GLEIF, a national register, the EPC scheme registers, the EBA STEP2 and NBP lists): true when one of them carries it, null when it was not found in what could be read in full. It never answers false today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, which can drop a BIC they carry, so an absence is not proven. It does not prove the bank still exists under this name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedvalidate_iban6 fields changed
      • addedOutput schema / properties / bank_code_holder
        Added value: +{
        +  "description": "confirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, or a partial register on a hit). inferred: we name a holder from a source that cannot settle it (our composite map, the prefix fallback, a published structural rule), so read it as our inference. not_allocated: the national register says nobody holds this code, so do not send. unknown: no conclusion. valid stays true in all four: it only means the IBAN is well formed. bank_code_check.status verified means resolved; this field says whether a source settles it.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "source_as_of": {
        -        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "listed_in_current_source": {
        +        "description": "Whether this BIC8 still appears in a list refreshed this cycle: GLEIF, the directory sources that carry no vintage, a national register, the EPC scheme registers. true when one of them carries it; null when it was not found in what could be read in full (never false by default). false is reserved for an index built from every list read in full, which is not the case today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, so this field answers true or null. It does NOT prove the bank still exists under this name: a clearing list can keep the name of a bank that was absorbed.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the source DATA is from, present ONLY when it differs from as_of. On a curated_map or directory_prefix answer it dates the directory row that supplied the name, the city, the LEI or the address when that row comes from a frozen public copy; never present on a national_register answer, whose name comes from the register and is dated by as_of. Absent means no gap has been established, never 'this is current'.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / checks
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_checked (IBANforge does not make this check here), not_applicable (the check has no object for this IBAN). payee_name: never checked here; the name check is made by the payee's bank through Verification of Payee (VoP), and sepa.vop_register_status says whether that bank answers VoP requests. account_exists: never checked here; only the payee's bank knows whether the account is open. payee_sanctions: never checked; the sanctions screen of POST /v1/iban/compliance is made on the payee's bank (BIC8) and country only. institution_sanctions and country_sanctions are filled by POST /v1/iban/compliance and not_checked on a validation. national_check_digits: checked for GB (Vocalink modulus); other countries are being added. A key may be added later; a key is never removed. Present only when valid is true.",
        +  "properties": {
        +    "account_exists": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "bank_code": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "bic": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "country_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "iban_checksum": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "iban_structure": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "institution_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "national_check_digits": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "payee_name": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "payee_sanctions": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    },
        +    "sepa_reachability": {
        +      "description": "pass | fail | inferred | unknown | not_checked | not_applicable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "iban_structure",
        +    "iban_checksum",
        +    "bank_code",
        +    "bic",
        +    "sepa_reachability",
        +    "national_check_digits",
        +    "account_exists",
        +    "payee_name",
        +    "institution_sanctions",
        +    "country_sanctions",
        +    "payee_sanctions"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / sepa / properties / bank_reachability
        Added value: +{
        +  "description": "listed | not_listed | no_bank | bank_code_not_allocated, or null. Whether the EPC scheme registers list the resolved BANK, never borrowed from the country (member, schemes and basis still describe the country and are unchanged). listed: the bank has rows in the SCT, SCT Inst or SDD register. not_listed: it has none (an absence from the register is not an exclusion from the scheme). no_bank: no BIC resolved for this bank code, so no bank could be looked up in the EPC registers (a register may still name the holder: see bank_code_holder and bank_code_check). bank_code_not_allocated: the national register says nobody holds the bank code. null: the registers are not loaded on this deployment (not consulted, never read as not_listed). Absent outside SEPA.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sepa / properties / bank_schemes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The bank's own schemes from the EPC registers when bank_reachability is listed; [] for an unallocated bank code; null otherwise."
        +}
      • addedOutput schema / properties / sepa / properties / vop_register_status
        Added value: +{
        +  "description": "active | pending | inactive | not_listed, or null. The bank's status in the EPC Verification of Payee register: active (the same as vop_participant true), pending, inactive, or not_listed when the register has no row for it; null when no BIC resolved or the register was not consulted (screened false). Outside the SEPA area the country answers instead of the register (not_listed on POST /v1/iban/compliance) whether or not the register is loaded; the validation carries no sepa.vop_register_status there. It says whether the payee's bank answers VoP requests; IBANforge never runs the name check itself.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  7. 3 tool updates
    • Changedbatch_validate_iban2 fields changed
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "source_as_of": {
        -        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / sepa / properties / vop_participant / description
        Previous value: -"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved."New value: +"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved, or the VoP register is not loaded (not consulted); a resolved bank outside the SEPA area is answered false from the country either way."
    • Changedcheck_compliance2 fields changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "source_as_of": {
        -        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / sepa / properties / vop_participant / description
        Previous value: -"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved."New value: +"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved, or the VoP register is not loaded (not consulted); a resolved bank outside the SEPA area is answered false from the country either way."
    • Changedvalidate_iban2 fields changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "source_as_of": {
        -        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, SK, CZ, BG, CH, LI and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / sepa / properties / vop_participant / description
        Previous value: -"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved."New value: +"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved, or the VoP register is not loaded (not consulted); a resolved bank outside the SEPA area is answered false from the country either way."
  8. 1 tool update
    • Changedcheck_compliance1 field changed
      • changedOutput schema / properties / meta / properties / sources / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
  9. 3 tool updates
    • Changedbatch_validate_iban1 field changed
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcheck_compliance1 field changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedvalidate_iban1 field changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "bic8": {
        -        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "redirected_from": {
        -        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        -        "type": "string"
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_as_of": {
        +        "description": "Year-month the SOURCE DATA is from, present only when it differs from as_of. as_of dates the import; for the redistributed SWIFT directory the upstream stopped publishing years ago, so as_of alone presents an old bank name as last month's. Absent means no gap has been established, never \"this is current\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  10. 3 tool updates
    • Changedbatch_validate_iban1 field changed
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcheck_compliance1 field changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedvalidate_iban1 field changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "city": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "country": {
        -                "type": "string"
        -              },
        -              "language": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "post_code": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "region": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "romanization": {
        -                "enum": [
        -                  "original_latin",
        -                  "gleif_english",
        -                  "unavailable"
        -                ],
        -                "type": "string"
        -              },
        -              "romanized": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "street": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "const": "registered",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "street",
        -              "post_code",
        -              "region",
        -              "city",
        -              "country",
        -              "romanized",
        -              "romanization",
        -              "source",
        -              "language",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "as_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "lei": {
        -        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lei_status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_address": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "adr_line": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "as_of": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "bldg_nb": {
        -                "type": "string"
        -              },
        -              "ctry": {
        -                "type": "string"
        -              },
        -              "format": {
        -                "enum": [
        -                  "structured",
        -                  "hybrid"
        -                ],
        -                "type": "string"
        -              },
        -              "pst_cd": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              },
        -              "strt_nm": {
        -                "type": "string"
        -              },
        -              "twn_nm": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "twn_nm",
        -              "ctry",
        -              "format",
        -              "source",
        -              "as_of"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "source": {
        -        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. San Marino is where the two part: the pairing is the supervisor’s, the code space is not its to settle.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today CH, LI, DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "bic8": {
        +        "description": "The eight characters of the institution — the field to compare a supplied BIC against. code is served as the consulted source publishes it, so it is 8 or 11 characters; this one never moves. The branch code (last three characters) is informational: in a cooperative network it names the LOCAL bank and the first eight its clearing institution.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "redirected_from": {
        +        "description": "The bank code asked about, when the register answered for the one that took over its clearing (CH/LI only today: SIX marks an IID concatenated and publishes its successor). The IBAN stays valid — a redirect is not a retirement.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  11. 2 tool updates
    • Addedpoll_api_key
    • Addedrequest_api_key
  12. 3 tool updates
    • Changedbatch_validate_iban23 fields changed
      • addedOutput schema / properties / results / items / properties / bank_code_check / properties / check_digit
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "algorithm": {
        +      "type": "string"
        +    },
        +    "valid": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "valid",
        +    "algorithm"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / bank_code_check / properties / institution
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "country": {
        +      "type": "string"
        +    },
        +    "lei": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "post_code": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "street": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "town": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "name",
        +    "street",
        +    "post_code",
        +    "town",
        +    "country"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / check_digits
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / clearing / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "eurosic": {
        -        "type": "boolean"
        -      },
        -      "iid": {
        -        "type": "string"
        -      },
        -      "instant_payments_chf": {
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "qr_iid": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sic": {
        -        "type": "boolean"
        -      },
        -      "town": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "iid",
        -      "name",
        -      "type",
        -      "town",
        -      "sic",
        -      "instant_payments_chf",
        -      "eurosic",
        -      "qr_iid"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "eurosic": {
        +        "type": "boolean"
        +      },
        +      "iid": {
        +        "type": "string"
        +      },
        +      "instant_payments_chf": {
        +        "type": "boolean"
        +      },
        +      "is_qr_iid": {
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "qr_iid": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "qr_iid_source": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "register",
        +              "headquarters"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "qr_iids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "sic": {
        +        "type": "boolean"
        +      },
        +      "town": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "iid",
        +      "name",
        +      "type",
        +      "town",
        +      "sic",
        +      "instant_payments_chf",
        +      "eurosic",
        +      "qr_iid",
        +      "qr_iid_source"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / clearing / description
        Added value: +"Swiss clearing data when country is CH or LI."
      • changedOutput schema / properties / results / items / properties / cost_usdc / description
        Previous value: -"What THIS IBAN was billed. Zero on the free MCP tier."New value: +"What THIS call was billed. Zero on the free MCP tier."
      • addedOutput schema / properties / results / items / properties / country / properties / code / description
        Added value: +"ISO 3166-1 alpha-2 country code."
      • addedOutput schema / properties / results / items / properties / formatted
        Added value: +{
        +  "description": "IBAN with 4-char groups for display.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / iban / description
        Added value: +"Normalized IBAN (uppercase, no spaces)."
      • addedOutput schema / properties / results / items / properties / issuer / properties / classification / description
        Added value: +"curated | register | default. Whether the type was established or assumed. curated = the BIC8 is in the issuer set, so this is an identification. register = an official register names the holder of this bank code and says what it is; it carries a date and an authority in psd_registration, and it only ever replaces a default. default = nothing is on file and \"bank\" is the fallback, which covers 97.9% of BIC8 (measured 29/07/2026). Count curated and register when sizing virtual-IBAN exposure, never default."
      • addedOutput schema / properties / results / items / properties / issuer / properties / iban_issuer
        Added value: +{
        +  "enum": [
        +    "confirmed",
        +    "not_listed"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / issuer / properties / type / description
        Added value: +"bank | digital_bank | emi | payment_institution; null when unsubstantiated"
      • changedOutput schema / properties / results / items / properties / issuer / properties / type / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / results / items / properties / list_price_usdc / description
        Previous value: -"Catalogue price per IBAN on the paid REST/x402 route."New value: +"Catalogue price of the same call on the paid REST/x402 route."
      • addedOutput schema / properties / results / items / properties / modulus_check
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "checked": {
        +      "type": "boolean"
        +    },
        +    "passed": {
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "table_fetched_on": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "checked",
        +    "passed",
        +    "source",
        +    "table_fetched_on"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / pra_authorisation
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "authorised": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "basis": {
        +      "type": "string"
        +    },
        +    "firm_name": {
        +      "type": "string"
        +    },
        +    "frn": {
        +      "type": "string"
        +    },
        +    "list_month": {
        +      "type": "string"
        +    },
        +    "section": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "authorised",
        +    "firm_name",
        +    "frn",
        +    "section",
        +    "basis",
        +    "source",
        +    "list_month"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / processing_ms
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / psd_registration
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "as_of": {
        +      "type": "string"
        +    },
        +    "competent_authority": {
        +      "type": "string"
        +    },
        +    "country": {
        +      "type": "string"
        +    },
        +    "entity_type": {
        +      "type": "string"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "registered": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "registered",
        +    "entity_type",
        +    "name",
        +    "country",
        +    "competent_authority",
        +    "source",
        +    "as_of"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / risk_indicators / properties / issuer_type / description
        Added value: +"Null when no institution resolved — it no longer defaults to \"bank\"."
      • addedOutput schema / properties / results / items / properties / risk_indicators / properties / sepa_reachable_scope / description
        Added value: +"Scope the reachability holds at. Country-derived, not account-derived."
      • addedOutput schema / properties / results / items / properties / sepa / properties / basis / description
        Added value: +"Where `schemes` came from: read at the EPC register for this bank, or defaulted from the country."
      • addedOutput schema / properties / results / items / properties / sepa / properties / vop_participant / description
        Added value: +"true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved."
    • Changedcheck_compliance26 fields changed
      • addedOutput schema / properties / bank_code_check / properties / check_digit
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "algorithm": {
        +      "type": "string"
        +    },
        +    "valid": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "valid",
        +    "algorithm"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / bank_code_check / properties / institution
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "country": {
        +      "type": "string"
        +    },
        +    "lei": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "post_code": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "street": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "town": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "name",
        +    "street",
        +    "post_code",
        +    "town",
        +    "country"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / bban
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "account_number": {
        +      "type": "string"
        +    },
        +    "bank_code": {
        +      "type": "string"
        +    },
        +    "branch_code": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "bank_code",
        +    "account_number"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / check_digits
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / clearing
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "eurosic": {
        +          "type": "boolean"
        +        },
        +        "iid": {
        +          "type": "string"
        +        },
        +        "instant_payments_chf": {
        +          "type": "boolean"
        +        },
        +        "is_qr_iid": {
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "qr_iid": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "qr_iid_source": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "register",
        +                "headquarters"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "qr_iids": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "sic": {
        +          "type": "boolean"
        +        },
        +        "town": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "iid",
        +        "name",
        +        "type",
        +        "town",
        +        "sic",
        +        "instant_payments_chf",
        +        "eurosic",
        +        "qr_iid",
        +        "qr_iid_source"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Swiss clearing data when country is CH or LI."
        +}
      • addedOutput schema / properties / compliance / properties / reachability / properties / screened
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / compliance / properties / reachability / required
        Previous value: -[
        -  "sepa_instant",
        -  "sct",
        -  "sdd"
        -]New value: +[
        +  "screened",
        +  "sepa_instant",
        +  "sct",
        +  "sdd"
        +]
      • addedOutput schema / properties / compliance / properties / sanctions / properties / bank_screened
        Added value: +{
        +  "description": "False means no bank was screened; do not interpret bank_sanctioned as a finding.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / compliance / properties / sanctions / required
        Previous value: -[
        -  "country_sanctioned",
        -  "bank_sanctioned",
        -  "matched_lists",
        -  "fatf_status"
        -]New value: +[
        +  "bank_screened",
        +  "country_sanctioned",
        +  "bank_sanctioned",
        +  "matched_lists",
        +  "fatf_status"
        +]
      • addedOutput schema / properties / compliance / properties / vop / properties / screened
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / compliance / properties / vop / required
        Previous value: -[
        -  "participant",
        -  "status"
        -]New value: +[
        +  "screened",
        +  "participant",
        +  "status"
        +]
      • addedOutput schema / properties / country / properties / code / description
        Added value: +"ISO 3166-1 alpha-2 country code."
      • addedOutput schema / properties / formatted
        Added value: +{
        +  "description": "IBAN with 4-char groups for display.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / iban / description
        Added value: +"Normalized IBAN (uppercase, no spaces)."
      • addedOutput schema / properties / issuer / properties / classification / description
        Added value: +"curated | register | default. Whether the type was established or assumed. curated = the BIC8 is in the issuer set, so this is an identification. register = an official register names the holder of this bank code and says what it is; it carries a date and an authority in psd_registration, and it only ever replaces a default. default = nothing is on file and \"bank\" is the fallback, which covers 97.9% of BIC8 (measured 29/07/2026). Count curated and register when sizing virtual-IBAN exposure, never default."
      • addedOutput schema / properties / issuer / properties / iban_issuer
        Added value: +{
        +  "enum": [
        +    "confirmed",
        +    "not_listed"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / issuer / properties / type / description
        Added value: +"bank | digital_bank | emi | payment_institution; null when unsubstantiated"
      • changedOutput schema / properties / issuer / properties / type / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / modulus_check
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "checked": {
        +      "type": "boolean"
        +    },
        +    "passed": {
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "table_fetched_on": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "checked",
        +    "passed",
        +    "source",
        +    "table_fetched_on"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / pra_authorisation
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "authorised": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "basis": {
        +      "type": "string"
        +    },
        +    "firm_name": {
        +      "type": "string"
        +    },
        +    "frn": {
        +      "type": "string"
        +    },
        +    "list_month": {
        +      "type": "string"
        +    },
        +    "section": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "authorised",
        +    "firm_name",
        +    "frn",
        +    "section",
        +    "basis",
        +    "source",
        +    "list_month"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / processing_ms
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / psd_registration
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "as_of": {
        +      "type": "string"
        +    },
        +    "competent_authority": {
        +      "type": "string"
        +    },
        +    "country": {
        +      "type": "string"
        +    },
        +    "entity_type": {
        +      "type": "string"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "registered": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "registered",
        +    "entity_type",
        +    "name",
        +    "country",
        +    "competent_authority",
        +    "source",
        +    "as_of"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / sepa / properties / basis
        Added value: +{
        +  "description": "Where `schemes` came from: read at the EPC register for this bank, or defaulted from the country.",
        +  "enum": [
        +    "country_default",
        +    "epc_register"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / sepa / properties / vop_participant
        Added value: +{
        +  "description": "true = resolved bank is listed as ready in the EPC VoP scheme register; null = no institution resolved.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "iban",
        -  "valid",
        -  "compliance",
        -  "meta",
        -  "cost_usdc"
        -]New value: +[
        +  "iban",
        +  "valid",
        +  "cost_usdc",
        +  "compliance",
        +  "meta"
        +]
    • Changedvalidate_iban11 fields changed
      • addedOutput schema / properties / bank_code_check / properties / check_digit
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "algorithm": {
        +      "type": "string"
        +    },
        +    "valid": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "valid",
        +    "algorithm"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / bank_code_check / properties / institution
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "country": {
        +      "type": "string"
        +    },
        +    "lei": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "post_code": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "street": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "town": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "name",
        +    "street",
        +    "post_code",
        +    "town",
        +    "country"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "city": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "country": {
        +                "type": "string"
        +              },
        +              "language": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "post_code": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "region": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "romanization": {
        +                "enum": [
        +                  "original_latin",
        +                  "gleif_english",
        +                  "unavailable"
        +                ],
        +                "type": "string"
        +              },
        +              "romanized": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "street": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "const": "registered",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "street",
        +              "post_code",
        +              "region",
        +              "city",
        +              "country",
        +              "romanized",
        +              "romanization",
        +              "source",
        +              "language",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "as_of": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "lei": {
        +        "description": "GLEIF identity of the resolved BIC holder, not necessarily the bank-code holder.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "lei_status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "postal_address": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "adr_line": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "as_of": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "bldg_nb": {
        +                "type": "string"
        +              },
        +              "ctry": {
        +                "type": "string"
        +              },
        +              "format": {
        +                "enum": [
        +                  "structured",
        +                  "hybrid"
        +                ],
        +                "type": "string"
        +              },
        +              "pst_cd": {
        +                "type": "string"
        +              },
        +              "source": {
        +                "type": "string"
        +              },
        +              "strt_nm": {
        +                "type": "string"
        +              },
        +              "twn_nm": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "twn_nm",
        +              "ctry",
        +              "format",
        +              "source",
        +              "as_of"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "description": "Source of the bank-code/BIC pairing; keep its provenance.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / bic / description
        Removed value: -"Resolved BIC/SWIFT when BBAN→BIC mapping exists. Read basis before storing it as a routing instruction: only a national_register pairing is settlement-grade."
      • changedOutput schema / properties / clearing / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "eurosic": {
        -        "type": "boolean"
        -      },
        -      "iid": {
        -        "type": "string"
        -      },
        -      "instant_payments_chf": {
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "qr_iid": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sic": {
        -        "type": "boolean"
        -      },
        -      "town": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "iid",
        -      "name",
        -      "type",
        -      "town",
        -      "sic",
        -      "instant_payments_chf",
        -      "eurosic",
        -      "qr_iid"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "eurosic": {
        +        "type": "boolean"
        +      },
        +      "iid": {
        +        "type": "string"
        +      },
        +      "instant_payments_chf": {
        +        "type": "boolean"
        +      },
        +      "is_qr_iid": {
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "qr_iid": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "qr_iid_source": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "register",
        +              "headquarters"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "qr_iids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "sic": {
        +        "type": "boolean"
        +      },
        +      "town": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "iid",
        +      "name",
        +      "type",
        +      "town",
        +      "sic",
        +      "instant_payments_chf",
        +      "eurosic",
        +      "qr_iid",
        +      "qr_iid_source"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / issuer / properties / iban_issuer
        Added value: +{
        +  "enum": [
        +    "confirmed",
        +    "not_listed"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / issuer / properties / type / description
        Previous value: -"bank | digital_bank | emi | payment_institution"New value: +"bank | digital_bank | emi | payment_institution; null when unsubstantiated"
      • changedOutput schema / properties / issuer / properties / type / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / modulus_check
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "checked": {
        +      "type": "boolean"
        +    },
        +    "passed": {
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "table_fetched_on": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "checked",
        +    "passed",
        +    "source",
        +    "table_fetched_on"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / pra_authorisation
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "authorised": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "basis": {
        +      "type": "string"
        +    },
        +    "firm_name": {
        +      "type": "string"
        +    },
        +    "frn": {
        +      "type": "string"
        +    },
        +    "list_month": {
        +      "type": "string"
        +    },
        +    "section": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "authorised",
        +    "firm_name",
        +    "frn",
        +    "section",
        +    "basis",
        +    "source",
        +    "list_month"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / psd_registration
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "as_of": {
        +      "type": "string"
        +    },
        +    "competent_authority": {
        +      "type": "string"
        +    },
        +    "country": {
        +      "type": "string"
        +    },
        +    "entity_type": {
        +      "type": "string"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "registered": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "registered",
        +    "entity_type",
        +    "name",
        +    "country",
        +    "competent_authority",
        +    "source",
        +    "as_of"
        +  ],
        +  "type": "object"
        +}
  13. 3 tool updates
    • Changedbatch_validate_iban1 field changed
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcheck_compliance1 field changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedvalidate_iban1 field changed
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE, BG, SK and SM; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  14. 1 tool update
    • Addedcheck_swiss_qr_bill
  15. 6 tool updates
    • Changedbatch_validate_iban14 fields changed
      • removedOutput schema / properties / results / items / properties / bank_code_check / properties / match / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / bank_code_check / properties / match / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / bank_code_check / properties / register / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / bank_code_check / properties / register / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / results / items / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / clearing / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "eurosic": {
        -        "type": "boolean"
        -      },
        -      "iid": {
        -        "type": "string"
        -      },
        -      "instant_payments_chf": {
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "qr_iid": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "sic": {
        -        "type": "boolean"
        -      },
        -      "town": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "iid",
        -      "name",
        -      "type",
        -      "town",
        -      "sic",
        -      "instant_payments_chf",
        -      "eurosic",
        -      "qr_iid"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "eurosic": {
        +        "type": "boolean"
        +      },
        +      "iid": {
        +        "type": "string"
        +      },
        +      "instant_payments_chf": {
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "qr_iid": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sic": {
        +        "type": "boolean"
        +      },
        +      "town": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "iid",
        +      "name",
        +      "type",
        +      "town",
        +      "sic",
        +      "instant_payments_chf",
        +      "eurosic",
        +      "qr_iid"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / items / properties / official_identity / properties / address / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / official_identity / properties / address / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / official_identity / properties / lei / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / official_identity / properties / lei / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / risk_indicators / properties / issuer_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / risk_indicators / properties / issuer_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / sepa / properties / vop_participant / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / sepa / properties / vop_participant / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
    • Changedcheck_compliance15 fields changed
      • removedOutput schema / properties / bank_code_check / properties / match / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bank_code_check / properties / match / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / bank_code_check / properties / register / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bank_code_check / properties / register / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / meta / properties / fatf_as_of / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / meta / properties / fatf_as_of / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / meta / properties / sanctions_as_of / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / meta / properties / sanctions_as_of / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / official_identity / properties / address / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / official_identity / properties / address / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / official_identity / properties / lei / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / official_identity / properties / lei / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / risk_indicators / properties / issuer_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / risk_indicators / properties / issuer_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlookup_bic12 fields changed
      • removedOutput schema / properties / branch_info / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / branch_info / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / city / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / country_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / country_name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / institution / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / institution / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / lei / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / lei / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / lei_status / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / lei_status / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlookup_ch_clearing14 fields changed
      • removedOutput schema / properties / address / properties / building_number / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / address / properties / building_number / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / address / properties / post_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / address / properties / post_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / address / properties / street / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / address / properties / street / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / address / properties / town / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / address / properties / town / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / bic / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bic / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / qr_iid / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / qr_iid / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / sic_iid / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / sic_iid / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedvalidate_iban14 fields changed
      • removedOutput schema / properties / bank_code_check / properties / match / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bank_code_check / properties / match / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / bank_code_check / properties / register / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bank_code_check / properties / register / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / bic / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "authoritative": {
        -        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        -        "type": "boolean"
        -      },
        -      "bank_name": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "basis": {
        -        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        -        "type": "string"
        -      },
        -      "city": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "code": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "bank_name",
        -      "city"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "authoritative": {
        +        "description": "Whether this BIC may be stored and settled against. Derived from basis, so the two cannot disagree. NOT bank_code_check.authoritative, which answers a different question — whether a national register was consulted about the BANK CODE. In Switzerland the register confirms the code while the BIC still comes from our curated map.",
        +        "type": "boolean"
        +      },
        +      "bank_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "basis": {
        +        "description": "Where the bank code to BIC pairing came from, and therefore what may be done with the BIC. national_register (the country register publishes this BIC for this bank code — today DE, AT, BE and BG; settlement-grade) | curated_map (our maintained bank-code map, exact key, usually right and not an allocation record) | directory_prefix (the bic8 LIKE fallback, which can match several institutions — read bank_code_check.candidates). Outside a national_register basis the BIC is ADVISORY: confirm it with the beneficiary or the bank before storing it as a routing instruction.",
        +        "type": "string"
        +      },
        +      "city": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "bank_name",
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / clearing / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "eurosic": {
        -        "type": "boolean"
        -      },
        -      "iid": {
        -        "type": "string"
        -      },
        -      "instant_payments_chf": {
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "qr_iid": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "sic": {
        -        "type": "boolean"
        -      },
        -      "town": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "iid",
        -      "name",
        -      "type",
        -      "town",
        -      "sic",
        -      "instant_payments_chf",
        -      "eurosic",
        -      "qr_iid"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "eurosic": {
        +        "type": "boolean"
        +      },
        +      "iid": {
        +        "type": "string"
        +      },
        +      "instant_payments_chf": {
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "qr_iid": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sic": {
        +        "type": "boolean"
        +      },
        +      "town": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "iid",
        +      "name",
        +      "type",
        +      "town",
        +      "sic",
        +      "instant_payments_chf",
        +      "eurosic",
        +      "qr_iid"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / official_identity / properties / address / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / official_identity / properties / address / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / official_identity / properties / lei / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / official_identity / properties / lei / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / risk_indicators / properties / issuer_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / risk_indicators / properties / issuer_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / sepa / properties / vop_participant / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / sepa / properties / vop_participant / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
    • Changedvalidate_payment_reference6 fields changed
      • removedOutput schema / properties / scheme / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scheme / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / source / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / valid / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / valid / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
  16. 4 tool updates
    • Changedbatch_validate_iban3 fields changed
      • addedOutput schema / properties / results / items / properties / cost_usdc / description
        Added value: +"What THIS IBAN was billed. Zero on the free MCP tier."
      • addedOutput schema / properties / results / items / properties / list_price_usdc
        Added value: +{
        +  "description": "Catalogue price per IBAN on the paid REST/x402 route.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / sepa / properties / basis
        Added value: +{
        +  "enum": [
        +    "country_default",
        +    "epc_register"
        +  ],
        +  "type": "string"
        +}
    • Changedcheck_compliance2 fields changed
      • addedOutput schema / properties / cost_usdc / description
        Added value: +"What THIS call was billed. Zero on the free MCP tier."
      • addedOutput schema / properties / list_price_usdc
        Added value: +{
        +  "description": "Catalogue price of the same call on the paid REST/x402 route.",
        +  "type": "number"
        +}
    • Changedlookup_ch_clearing2 fields changed
      • addedOutput schema / properties / cost_usdc / description
        Added value: +"What THIS call was billed. Zero on the free MCP tier."
      • addedOutput schema / properties / list_price_usdc
        Added value: +{
        +  "description": "Catalogue price of the same call on the paid REST/x402 route.",
        +  "type": "number"
        +}
    • Changedvalidate_iban3 fields changed
      • addedOutput schema / properties / cost_usdc / description
        Added value: +"What THIS call was billed. Zero on the free MCP tier."
      • addedOutput schema / properties / list_price_usdc
        Added value: +{
        +  "description": "Catalogue price of the same call on the paid REST/x402 route.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / sepa / properties / basis
        Added value: +{
        +  "description": "Where `schemes` came from: read at the EPC register for this bank, or defaulted from the country.",
        +  "enum": [
        +    "country_default",
        +    "epc_register"
        +  ],
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    IBAN validation, extraction, format specs, and BIC/SWIFT lookup tools for AI assistants, backed by ibanchecker.cash. Covers 90 countries; no IBAN data is stored.
    5
    77 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to validate IBANs, generate synthetic checksum-valid test IBANs, and look up bank registry records by BIC or domestic identifier, with optional paid capabilities for bank, BIC, and SEPA Instant/VoP reachability.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides free read-only business checks for IBANs, EU VAT number format, Peppol e-invoice rules, supplier bank-detail changes, and CSV/XLSX data cleaning.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.