IBANforge

Validate up to 100 IBANs in one call at $0.002 per IBAN (2.5x cheaper per IBAN than single calls at $0.005, and one settlement instead of N). Use for CSV cleanup, customer DB dedup, or pre-flight payout list triage. Production · server processing <5ms (network excluded — measure your own round trip on GET /ping) for a 100-IBAN batch · 121,000+ BICs · v1.4.3.

OtherLiveeip155:8453Exactvia cdp
IbanBicSepaComplianceBanking
Calls · 30d
1→ 0%
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 23 snapshots so far.
$0.17
Verified settled volume
33 settlements proven x402 by their on-chain EIP-3009 marker.
$0.0040
Listed price
As published in the catalog. Always read the live 402 before paying.
1
Calls · 30d
Upstream's own call count for this endpoint, not ours.
1
Unique payers · 30d
Last called 2026-08-17 05:18Z
Upstream on-chain volume
Reported by the source catalog.
Paid to
0xD13bD0A4120BA301125290e5cc0c7EFD4CB40a55

The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.

Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Provider

The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.

Accepts

The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.

0.004USDC≈ $0.004 USD
on Base · exact scheme

Pay 0.004 USDC on Base to 0xD13b…40a55. The signed payment is good for 1 minute.

USD Coin contract
0x8335…02913
Payment window
1 minute
As published
4000 smallest units
The catalog’s raw entry
[
  {
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "extra": {
      "name": "USD Coin",
      "version": "2"
    },
    "payTo": "0xD13bD0A4120BA301125290e5cc0c7EFD4CB40a55",
    "amount": "4000",
    "scheme": "exact",
    "network": "eip155:8453",
    "maxTimeoutSeconds": 60
  }
]

Extensions

{
  "bazaar": {
    "info": {
      "input": {
        "body": {
          "ibans": [
            "CH1000230000000012345",
            "DE89370400440532013000"
          ]
        },
        "type": "http",
        "method": "POST",
        "schema": {
          "type": "object",
          "required": [
            "ibans"
          ],
          "properties": {
            "ibans": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "minItems": 1,
              "description": "Array of 1 to 100 IBAN strings."
            }
          }
        },
        "bodyType": "json",
        "discoverable": true
      },
      "output": {
        "type": "json",
        "example": {
          "count": 2,
          "results": [
            {
              "bic": {
                "city": "Zürich",
                "code": "UBSWCHZH",
                "bank_name": "UBS Switzerland AG"
              },
              "iban": "CH1000230000000012345",
              "valid": true,
              "country": {
                "code": "CH",
                "name": "Switzerland"
              }
            },
            {
              "bic": {
                "city": "Köln",
                "code": "COBADEFFXXX",
                "bank_name": "Commerzbank"
              },
              "iban": "DE89370400440532013000",
              "valid": true,
              "country": {
                "code": "DE",
                "name": "Germany"
              }
            }
          ],
          "cost_usdc": 0.004,
          "valid_count": 2,
          "_example_notice": "ILLUSTRATIVE SAMPLE — these are demo values for a fixed record, NOT the data for the resource you requested. Do not report them to a user. Authenticate (Authorization: Bearer ifk_...) or pay via x402 to get the real response."
        }
      }
    },
    "schema": {
      "properties": {
        "input": {
          "required": [
            "method"
          ],
          "properties": {
            "method": {
              "enum": [
                "POST"
              ],
              "type": "string"
            }
          }
        }
      }
    },
    "bodyType": "json",
    "inputSchema": {
      "type": "object",
      "required": [
        "ibans"
      ],
      "properties": {
        "ibans": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 100,
          "minItems": 1,
          "description": "Array of 1 to 100 IBAN strings."
        }
      }
    },
    "discoverable": true,
    "outputSchema": {
      "type": "object",
      "properties": {
        "count": {
          "type": "number",
          "description": "Total IBANs processed."
        },
        "results": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "bic": {
                "type": "object",
                "properties": {
                  "city": {
                    "type": "string"
                  },
                  "code": {
                    "type": "string"
                  },
                  "bank_name": {
                    "type": "string"
                  }
                },
                "description": "Resolved BIC/SWIFT (when BBAN→BIC mapping exists). Null when unresolved."
              },
              "bban": {
                "type": "object",
                "properties": {
                  "bank_code": {
                    "type": "string"
                  },
                  "branch_code": {
                    "type": "string"
                  },
                  "account_number": {
                    "type": "string"
                  }
                }
              },
              "iban": {
                "type": "string",
                "description": "Normalized IBAN (uppercase, no spaces)."
              },
              "sepa": {
                "type": "object",
                "properties": {
                  "member": {
                    "type": "boolean"
                  },
                  "schemes": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "SCT",
                        "SDD",
                        "SCT_INST"
                      ],
                      "type": "string"
                    }
                  },
                  "vop_required": {
                    "type": "boolean",
                    "description": "Verification of Payee (EU 2024/886) obligation for this country."
                  }
                }
              },
              "valid": {
                "type": "boolean"
              },
              "issuer": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "type": {
                    "enum": [
                      "bank",
                      "digital_bank",
                      "emi",
                      "payment_institution"
                    ],
                    "type": "string"
                  },
                  "classification": {
                    "enum": [
                      "curated",
                      "default"
                    ],
                    "type": "string",
                    "description": "curated = identified from the issuer set; default = 'bank' fallback, 97.9% of BIC8."
                  }
                }
              },
              "country": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "ISO 3166-1 alpha-2."
                  },
                  "name": {
                    "type": "string"
                  }
                }
              },
              "clearing": {
                "type": "object",
                "properties": {
                  "iid": {
                    "type": "string",
                    "description": "5-digit zero-padded BC-Nummer."
                  },
                  "sic": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "string"
                  },
                  "town": {
                    "type": "string"
                  },
                  "type": {
                    "enum": [
                      "bank",
                      "cantonal_bank",
                      "postfinance",
                      "raiffeisen",
                      "central_bank",
                      "foreign_participant"
                    ],
                    "type": "string"
                  },
                  "qr_iid": {
                    "type": "string",
                    "description": "QR-IID allocation, null when none."
                  },
                  "eurosic": {
                    "type": "boolean"
                  },
                  "instant_payments_chf": {
                    "type": "boolean"
                  }
                },
                "description": "Swiss clearing data when country is CH or LI and the IID is in the SIX BankMaster. Null otherwise."
              },
              "cost_usdc": {
                "type": "number"
              },
              "formatted": {
                "type": "string",
                "description": "IBAN with 4-char groups, e.g. CH10 0023 0000 0000 1234 5."
              },
              "next_steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "code",
                    "do",
                    "because"
                  ],
                  "properties": {
                    "do": {
                      "type": "string",
                      "description": "The instruction, in one sentence an agent can relay to a person."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable identifier. Today: bank_code_not_allocated (the national register denies the code, do not send), bank_code_retired (allocated but being withdrawn, re-paper against superseded_by), verify_payee_name (we cannot confirm it, treat as unavailable and let a name check decide), bic_is_advisory (the BIC was picked from several candidates), issuer_not_a_known_iban_issuer (the code resolves to a BIC, but its holder is not among the providers known to issue IBANs in that country), test_bic, expect_virtual_iban (curated non-bank issuer, account holder and IBAN holder often differ), screen_compliance, generate_payment_qr (partner handoff to PayQR on a register-confirmed SEPA account: generate and self-check a SPAYD or EPC/GiroCode payment QR)."
                    },
                    "action": {
                      "type": "string",
                      "description": "The call that performs the step, when one exists: an IBANforge endpoint, or the partner site for a partner handoff."
                    },
                    "because": {
                      "type": "string",
                      "description": "The field of this response that produced the step, so the advice is auditable."
                    }
                  }
                },
                "description": "Ordered advice derived from THIS result: what blocks a payment first, what merely enriches it after. Branch on `code`, never on the prose. Absent or empty for an IBAN that failed validation, since the error already says what to do."
              },
              "check_digits": {
                "type": "string"
              },
              "processing_ms": {
                "type": "number"
              },
              "bank_code_check": {
                "type": "object",
                "required": [
                  "value",
                  "status",
                  "match",
                  "register",
                  "authoritative",
                  "as_of"
                ],
                "properties": {
                  "as_of": {
                    "type": "string",
                    "description": "Year-month the consulted reference set was last refreshed."
                  },
                  "match": {
                    "enum": [
                      "register",
                      "prefix",
                      null
                    ],
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "register: exact key in the reference set, deterministic. prefix: the bic8 LIKE fallback, reachable only in the 30 countries whose bank code may open on a letter (a BIC8 always does) — check candidates."
                  },
                  "value": {
                    "type": "string",
                    "description": "The bank code that was actually checked. Normally identical to bban.bank_code. It differs in Finland, where the monetary institution code is 1 to 4 characters depending on its leading digits while bban.bank_code stays the fixed positional slice: a Nordea IBAN carries bban.bank_code \"123\" and value \"1\". When they differ, this field is the one the verdict is about."
                  },
                  "status": {
                    "enum": [
                      "verified",
                      "not_in_register",
                      "unavailable"
                    ],
                    "type": "string",
                    "description": "verified: resolves to an institution we can name. not_in_register: it does not, in reference data we do hold for this country — actionable as non-existence ONLY when authoritative is true. unavailable: we hold no reference data for this country, so no opinion."
                  },
                  "retired": {
                    "type": "boolean",
                    "description": "Present and true when an authoritative register marks the code for deletion: the institution is being retired. The code WAS allocated, so this is a verified result, not a denial. See superseded_by."
                  },
                  "register": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Name of the reference set consulted."
                  },
                  "candidates": {
                    "type": "integer",
                    "description": "BIC8 the prefix search matched. Present only for match=prefix. Greater than 1 means the returned BIC is one of several and may belong to a different institution than the account does."
                  },
                  "institution": {
                    "type": "object",
                    "required": [
                      "name",
                      "street",
                      "post_code",
                      "town",
                      "country"
                    ],
                    "properties": {
                      "lei": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Legal Entity Identifier, where the register publishes one (the OeNB does, 99% of entries)."
                      },
                      "name": {
                        "type": "string"
                      },
                      "town": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "street": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "One line, house number included, matching the GLEIF shape. Null where the register publishes none (DE, BE)."
                      },
                      "country": {
                        "type": "string"
                      },
                      "post_code": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "What the national register publishes about the allocated institution. Present only on an authoritative answer — composite-map hits stay bare (naming a BIC holder is the bic block, and its address would imply a register that was not consulted). Depth varies by register: SIX (CH/LI) and the OeNB (AT) publish the full seat address, the Bundesbank (DE) publishes postal code and town only, the BNB (BE) publishes names alone; Finland stays without this block, its codes belong to banking groups. Absent fields are null, never guessed. This is the institution allocated the BANK CODE — not a branch, and not proof of any account."
                  },
                  "authoritative": {
                    "type": "boolean",
                    "description": "True only where that reference set is the national register: today CH and LI against the SIX BankMaster, DE against the Bundesbank Bankleitzahlendatei, FI against the Finance Finland monetary institution list, AT against the Oesterreichische Nationalbank SEPA-Zahlungsverkehrs-Verzeichnis, and BE against the Banque nationale de Belgique bank identification codes. This is the flag to branch on: everywhere else an absence is evidence of absence from our data, not of non-existence. One asymmetry worth knowing: CH, LI, DE, AT and BE allocate codes to individual institutions, while FI allocates prefixes to banking groups, so a Finnish verified confirms the group and its BIC rather than one specific bank. The negative direction carries full weight in all six."
                  },
                  "superseded_by": {
                    "type": "string",
                    "description": "The bank code that takes over, when the register names one. Re-paper the beneficiary against it."
                  }
                },
                "description": "Separate verdict on the BBAN bank code. `valid` answers ISO 13616 (structure + mod-97) and says nothing about whether the bank code identifies an institution; this field answers that, and states how much weight the answer carries. Present only when the IBAN is valid."
              },
              "risk_indicators": {
                "type": "object",
                "properties": {
                  "test_bic": {
                    "type": "boolean"
                  },
                  "issuer_type": {
                    "enum": [
                      "bank",
                      "digital_bank",
                      "emi",
                      "payment_institution",
                      null
                    ],
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Null when no institution resolved. It no longer defaults to \"bank\" for an institution we did not find."
                  },
                  "country_risk": {
                    "enum": [
                      "standard",
                      "elevated",
                      "high"
                    ],
                    "type": "string"
                  },
                  "vop_coverage": {
                    "type": "boolean"
                  },
                  "sepa_reachable": {
                    "type": "boolean"
                  },
                  "sepa_reachable_scope": {
                    "enum": [
                      "country"
                    ],
                    "type": "string",
                    "description": "Scope sepa_reachable holds at. Derived from the country, never from the account."
                  }
                },
                "description": "AML/CFT pre-screening indicators."
              }
            }
          }
        },
        "cost_usdc": {
          "type": "number",
          "description": "Actual USDC charged for this call."
        },
        "valid_count": {
          "type": "number",
          "description": "Number of valid IBANs."
        }
      }
    }
  }
}

Provenance

Seen in the source catalog
2026-08-17 05:18Z
Last indexed by Roundhouse
2026-09-16 05:20Z
Last enriched (probe, favicon, geo)
2026-09-10 03:45Z
x402 version
2
Max timeout
60s
Liveness probe
HTTP 402
Report

Hand this page to an agent

Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.

GET api.roundhouseai.io/v0/endpoints

This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 23 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.

Open skill.md
Show the prompt
Using Roundhouse, look up the x402 service IBANforge and tell me whether it is
worth paying: what a call costs, whether the endpoint answered when last probed, and what
its payment record actually shows.

curl -s 'https://api.roundhouseai.io/v0/endpoints?q=IBANforge'
curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>'

Then call it: read the price from the live 402 at https://api.ibanforge.com/v1/iban/batch, never from
a cached figure, and pay with an x402 client.

The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except
/v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402,
or use an organization key from https://roundhouseai.io/dashboard/team.

If you do not have Roundhouse tools or skills installed, read
https://roundhouseai.io/skill.md first — it is the whole procedure.