"Free SEPA Compliance Validator API — IBAN, BIC, SCT Inst, EPC QR"
EU payment integrations have a recurring problem: they're painful to validate. IBAN checksums, BIC formats, SCT Instant eligibility, EPC QR payloads — every EU payments developer has written some version of this validator, usually right before a demo fails because of a typo in an IBAN.
We just shipped a free SEPA compliance validator API at c.pixeldev.eu/sepa. No auth, no rate-card, just useful.
What it validates
IBAN (MOD-97 checksum)
Full ISO 13616 validation — rearranges the IBAN, converts letters to digits, and computes MOD-97 using BigInt to avoid floating-point drift on long numbers. Also checks the expected length per country (22 chars for DE, 27 for FR, etc. — all 37 SEPA countries covered).
curl "https://c.pixeldev.eu/sepa/v1/validate/iban?iban=DE89370400440532013000"
{
"valid": true,
"iban": "DE89370400440532013000",
"country": "DE",
"countryName": "Germany",
"length": 22,
"sepa": true,
"sctInst": true,
"formatted": "DE89 3704 0044 0532 0130 00"
}
BIC (ISO 9362)
Validates the 8 or 11-character format (AAAA BB CC [DDD]) and parses it into institution code, country, location, and branch. Returns SEPA and SCT Inst flags for the country.
curl "https://c.pixeldev.eu/sepa/v1/validate/bic?bic=COBADEFFXXX"
{
"valid": true,
"bic": "COBADEFFXXX",
"institution": "COBA",
"country": "DE",
"location": "FF",
"branch": "XXX",
"isPrimary": true,
"sepa": true,
"sctInst": true
}
SCT Instant eligibility
Given an IBAN, tells you whether the country participates in the SCT Inst scheme — including max transfer amount (€100,000), settlement time (< 10 seconds), and a link to the EPC participant register for BIC-level verification.
curl "https://c.pixeldev.eu/sepa/v1/check/sct-inst?iban=DE89370400440532013000"
{
"eligible": true,
"confidence": "country-level",
"maxAmount": 100000,
"currency": "EUR",
"settlementTime": "< 10 seconds"
}
EPC QR payload validation
Validates the full 11/12-line EPC v001/v002 QR code payload format — service tag, version, charset, identification code, BIC, beneficiary name (≤70 chars), IBAN (full MOD-97 check), amount format (EURn.nn), purpose code (≤4 chars), remittance info (structured ≤35 chars or unstructured ≤140 chars, mutually exclusive), and beneficiary info (≤70 chars in v002).
curl -X POST https://c.pixeldev.eu/sepa/v1/validate/epc-qr \
-H 'Content-Type: application/json' \
-d '{"payload":"BCD\n002\n1\nSCT\nCOBADEFFXXX\nAcme GmbH\nDE89370400440532013000\nEUR123.45\n\nInvoice 2024-001\n"}'
{
"valid": true,
"errors": [],
"warnings": [],
"parsed": {
"serviceTag": "BCD",
"version": "002",
"name": "Acme GmbH",
"iban": "DE89370400440532013000",
"amount": "EUR123.45",
"remittanceRef": "Invoice 2024-001"
}
}
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /sepa/v1/validate/iban?iban= |
IBAN checksum + country validation |
| GET | /sepa/v1/validate/bic?bic= |
BIC/SWIFT format validation |
| GET | /sepa/v1/check/sct-inst?iban= |
SCT Instant eligibility by IBAN |
| POST/GET | /sepa/v1/validate/epc-qr |
EPC QR payload validation |
| GET | /sepa/v1/countries |
List 37 SEPA countries with IBAN lengths |
All endpoints return JSON, support CORS (*), and include rate limit headers. Free tier: 100 requests / 15 minutes per IP.
Try it
Interactive playground at c.pixeldev.eu/sepa — no sign-up, paste and go.
The remaining work: an API key system for higher rate limits and a pricing page. That's for the next build session. For now, it's fully functional and free.