EU FASTER Directive · 27 Member States

Compliance infrastructure
for every EU reclaim

Submit beneficial-owner and custody-chain data to any EU member-state tax authority. Receive the official UUID per beneficial owner — the prerequisite for every WHT reclaim.

Get started → API reference
27
EU member states
3
Relief tracks
38
Tests passing
0
External deps in test

End-to-end pipeline

From institution to UUID in four steps

Every step is validated and persisted. The pipeline fails closed before any submission — no partial reports, no silent errors.

01
Register
POST /v1/institutions
API key issued once
02
Declare event
POST /v1/dividend-events
ISIN · record date · track
03
Upload data
POST /v1/submissions
BOs · positions · eTRCs
04
Receive UUIDs
POST /v1/reports/generate
one UUID per BO

Built for production

Everything a compliance pipeline needs

Designed for institutions that need auditability and correctness — not just a wrapper around a tax authority API.

⚙️
Durable saga workflow
State-machine persisted in MongoDB. Every step is idempotent and retryable. A mid-submission network failure does not lose state or double-submit to the tax authority.
validated
generating_xml
submitting_dip ← resuming after failure
awaiting_uuid
completed
27
EU member states
One transport adapter per country. Germany live today; every other EU authority plugs in without changing the pipeline or validation logic.
🔒
Fail-closed validation
BO completeness, omnibus reconciliation (Σ per-BO qty = omnibus position), and eTRC validity on record date — all checked before any XML is generated.
Inline & queued modes
inline returns UUIDs synchronously — ideal for CI. queued returns 202 and finalises via Arq worker with DIP ack polling.
🔄
FASTER relief tracks
Relief-at-source, quick-refund, or standard reclaim per dividend event. Relief instructions exposed on a dedicated endpoint for downstream processing.
📋
Append-only audit trail
Every state transition is written to an immutable audit record — queryable and exportable for regulatory inspection at any time.
☁️
Cloud-native deploy
Docker Compose for dev. Helm (HPA + Arq worker) + Terraform for production. Prometheus metrics, OpenTelemetry tracing, EU data residency enforced.

Country coverage

Germany live — EU rollout in progress

Each member state is a transport adapter. The pipeline, validation, and saga stay identical across every country.

🇩🇪
Germany
BZSt · MiKaDiv DIP
● Live
🇫🇷
France
DGFiP
◑ Planned
🇳🇱
Netherlands
Belastingdienst
◑ Planned
🇧🇪
Belgium
SPF Finances
○ Roadmap
🇦🇹
Austria
BMF
○ Roadmap
🇪🇸
Spain
AEAT
○ Roadmap
🇮🇹
Italy
Agenzia Entrate
○ Roadmap
🇸🇪
Sweden
Skatteverket
○ Roadmap
🇩🇰
Denmark
Skattestyrelsen
○ Roadmap
🇵🇱
Poland
KAS
○ Roadmap
🇵🇹
Portugal
AT
○ Roadmap
🇪🇺
+16 more
All EU member states
○ FASTER 2030

Regulatory scope

Built for FASTER from day one

Not retrofitted. Data model and transport seam were designed around standardised FASTER reporting from the start.

🇪🇺
EU FASTER Directive
Relief-at-source, quick-refund, and standard reclaim tracks. Standardised XML format. Multi-member-state transport seam. Terraform validates eu-* regions only.
🇩🇪
MiKaDiv — Germany
BZSt DIP submission with mTLS. ELMA ack polling for async UUID delivery. Omnibus reconciliation and eTRC validity gates before every submission.
🏛️
Audit & Security
Append-only audit log on every transition. Egress NetworkPolicy scoped per authority endpoint. API keys per institution, shown once. Trivy image scanning in CI.

Technology

Modern async Python stack

FastAPI async REST
Pydantic v2 validation
MongoDB Motor
Redis queue + cache
Arq worker
S3 XML payloads
Docker Compose
Helm HPA + worker
Terraform infra
Prometheus
OpenTelemetry
Python 3.11+

Get started

Up and running in minutes

Zero external services required — the full test suite runs with in-memory MongoDB and a mock DIP client.

# install dev dependencies
pip install -r requirements-dev.txt

# 38 tests — no external services required
pytest -q

38 passed in 2.4s
View on GitHub →

Ready to automate your WHT pipeline?

Clone the repo, run the quickstart, and have a report generating UUIDs in under ten minutes.

View on GitHub → API reference