validate-einvoice-action
May 25, 2026 · View on GitHub
Validate EU electronic invoices in CI — Peppol BIS 3, EN 16931, XRechnung 3.0.x, Factur-X / ZUGFeRD, UBL, CII — against the official Schematron rules. Every error comes back with a plain-English fix hint.
Backed by eleata. Free tier: 200 validations/month, no credit card.
Quickstart
- uses: hernaninverso/validate-einvoice-action@v1
with:
file: invoices/*.xml
format: peppol-bis-3
api-key: ${{ secrets.ELEATA_API_KEY }}
That's it. The job fails if any file has an error-severity finding. Warnings are surfaced in the GitHub Actions log but don't fail the build by default.
Get a free key (200/mo, no card) at https://eleata.io/signup. Store it as a repo secret named ELEATA_API_KEY.
Inputs
| Name | Required | Default | Description |
|---|---|---|---|
file | yes | — | Path or glob to one or more invoice files. Supports ** recursion. |
format | no | peppol-bis-3 | One of peppol-bis-3, en16931-ubl, en16931-cii, xrechnung-ubl, xrechnung-cii, factur-x, ubl, cii, auto. |
api-key | yes | — | Your eleata API key. Always pass via ${{ secrets.* }} — never hard-code. |
api-base | no | https://api.eleata.io | Override the API endpoint (useful for staging or on-prem). |
fail-on | no | error | error (default), warning, or never. |
Outputs
| Name | Description |
|---|---|
results-json | Path to a JSON file containing every file's validation result. |
total-files | Number of files validated. |
total-errors | Total error-severity findings across all files. |
What gets reported
For each file, the action writes a job summary to $GITHUB_STEP_SUMMARY and emits per-file ::group:: / ::error:: / ::notice:: annotations. Each error line shows:
BR-CO-15: Sum of line net amounts must equal LegalMonetaryTotal/LineExtensionAmount.
fix: Recompute lines: 1234.50 + 56.00 = 1290.50, you have 1290.00.
The fix field is the differentiator — it's a curated, plain-English remediation for the ~400 most common rule failures across all supported formats.
Format coverage
| Format | Status |
|---|---|
| Peppol BIS Billing 3.0 | GA |
| EN 16931 (UBL & CII) | GA |
| XRechnung 3.0.x (UBL & CII) | GA |
| Factur-X 1.08 / ZUGFeRD 2.4 | GA (PDF/A-3 supported; CII XML auto-extracted) |
| OASIS UBL 2.1 schema | GA |
| UN/CEFACT CII schema | GA |
| FatturaPA (Italian SdI) | Coming Q3 2026 — private beta |
Example: catch a broken invoice before it ships
name: Validate outgoing invoices
on:
pull_request:
paths:
- 'invoices/**.xml'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hernaninverso/validate-einvoice-action@v1
with:
file: invoices/**/*.xml
format: auto
api-key: ${{ secrets.ELEATA_API_KEY }}
Notes
- Runs as a composite action — no Docker pull, starts in <1 second on
ubuntu-latest. - Requires
jq(pre-installed on GitHub-hosted Ubuntu / macOS runners). - The action streams files directly to the API; nothing is persisted on disk beyond the per-file response.
- API responses are cached for 24h on identical SHA-256 of the file payload.
License
Apache 2.0 — see LICENSE. Built on top of Mustang and phive, both Apache 2.0.
Support
- Documentation: https://eleata.io/docs/
- Email: hello@eleata.io
- Issues: https://github.com/hernaninverso/validate-einvoice-action/issues