Every checkout or KYC form ends up re-implementing the same checksums: IBAN mod-97, the Luhn check for cards, a different VAT algorithm for each EU country, and postcode regexes. I bundled them behind one small API so the frontend can call a single endpoint.
Example: validate an IBAN before payout
const res = await fetch( "https://validkit-iban-vat-card-isbn-bic-postcode-validator.p.rapidapi.com/iban?value=GB82WEST12345698765432", { headers: { "X-RapidAPI-Key": KEY, "X-RapidAPI-Host": "validkit-iban-vat-card-isbn-bic-postcode-validator.p.rapidapi.com" } }); console.log(await res.json()); // { valid: true, formatted: "GB82 WEST 1234 5698 7654 32", country: "GB" } Endpoints
| Endpoint | Checks |
|---|---|
/iban | mod-97 checksum, country length, pretty format |
/vat | EU VAT checksum per country (DE, FR, IT, ES, NL…) |
/card | Luhn + brand (Visa, Mastercard, Amex…), returns masked number |
/bic | SWIFT/BIC structure |
/isbn, /ean | book & barcode check digits, ISBN-10→13 |
/postcode | 24 countries, normalises bs31dh → BS3 1DH |
Note: /vat checks the format and checksum, not live VIES registration. It catches typos before you make the slow VIES call.
Free tier: 200 calls/month. ValidKit on RapidAPI

