The Problem
Every B2B SaaS serving EU customers faces the same onboarding friction:
- Is this company's VAT number actually valid?
- If I need to decode an Italian fiscal code, does it pass checksum?
- When is this invoice actually due, considering weekends and national holidays?
Most teams end up stitching together 3-4 different sources, dealing with XML, SOAP, and inconsistent JSON formats. Today I'll show you a cleaner flow using 3 compliance-first APIs that I built specifically for this exact scenario.
Step 1: Validate the EU VAT number
Let's say a German company signs up: DE122268496. The official European Commission VIES service is the source of truth, but its native API can be... let's say "legacy-flavored."
With the EU VAT Validator API, it's a simple GET:
http
GET /check?vat=DE122268496
response
{
"valid": true,
"country": "DE",
"vat_number": "122268496",
"request_date": "2026-09-06",
"company": {
"name": "Registered Company Name",
"address": "Registered Address"
},
"source": "VIES (European Commission)"
}
The API handles input normalization (spaces, dashes, lowercase) and gracefully reports errors. You get the official registered name and address — perfect for CRM enrichment.
Step 2: Decode the Italian fiscal code (for Italian customers)
If the same customer is Italian and provides their codice fiscale (e.g. RSSMRA85M01H501Q), we can extract much more than just validity:
GET /decode?cf=RSSMRA85M01H501Q
Response:
{
"valid": true,
"normalized": "RSSMRA85M01H501Q",
"omocodia": false,
"checks": { "format": true, "checksum": true, "date": true },
"gender": "M",
"birth_date": "1985-08-01",
"birth_place_code": "H501",
"birth_place": "Milano (MI)",
"birth_country": "Italy",
"source": "Official checksum algorithm + ISTAT municipal codes"
}
Key features:
Official checksum validation
Omocodia handling (letters replacing digits)
Birth date, gender, and municipality lookup from ISTAT cadastral codes
~8,000 Italian municipalities, cached for speed
Step 3: Compute the invoice due date in working days
Once the customer is validated, the next question is: when is this invoice due?
If payment terms are "30 working days from today", you can't just add 30 calendar days. You need to exclude weekends and national public holidays.
GET /workdays?from=2026-09-06&to=2026-10-31&country=IT
Response:
{
"country": "IT",
"from": "2026-09-06",
"to": "2026-10-31",
"total_days": 56,
"weekend_days": 16,
"holidays_on_weekdays": 2,
"working_days": 38,
"holidays_in_range": [
{"date": "2026-11-01", "name": "All Saints' Day"}
],
"note": "National public holidays only (local/patron saints not included)"
}
This API covers the 4 largest EU economies: Italy, Germany, France, and Spain. You can also fetch the full holiday list for any year with the /holidays endpoint.
Why This Flow Works
Single provider, consistent JSON: All 3 APIs use the same response format, error handling, and CORS policy. Integration is predictable.
Compliance-first sources: VAT from the European Commission, fiscal codes from official algorithms + ISTAT, working days from national calendars. No scraping, no legal gray areas.
Honest free tiers: Each API offers 100 free requests/month — enough for testing and small-scale usage. Scaling is predictable ($9 for 5,000, $29 for 50,000).
Same customer, same use case: These aren't random APIs thrown together. They're designed to be used in sequence by the same B2B customer.
How to Try It
All 3 APIs are live on RapidAPI with free tiers:
EU VAT Validator (VIES) → https://vies-vat-cheker.bianchini-luka.workers.dev
Italian Fiscal Code Decoder → https://cf-decoder.bianchini-luka.workers.dev
EU Working Days & Holidays → https://eu-workdays.bianchini-luka.workers.dev
Subscribe to the free plan on each, grab your API key, and start building. The documentation includes runnable examples in the console.
I built these APIs because I was tired of patching together brittle solutions for EU compliance. If you're building B2B software for European customers, I hope this flow saves you the same frustration.
Feel free to reach out via RapidAPI messaging if you have feedback, feature requests, or need custom integrations. Happy coding! 🚀




![[AI in Practice] Gemini 3.8 Flash TTS Launch: I built a "Learn Japanese with MVs" Web App and burned through my daily quota.](https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2daysv0tpvipes8hgr3u.png)







![[AI in Action] Gemini 3.8 Live Upgrade: Paying Off Technical Debt and How My Test Script Fooled Me Three Times](https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foczcxhr0hrogivkmeh0p.png)