Metadata-Version: 2.4
Name: xrechnung-check
Version: 0.2.0
Summary: CLI for the free XRechnung / ZUGFeRD / Factur-X validator API at checkxrechnung.com
Author-email: Bobook Limited <info@bobook.club>
License-Expression: MIT
Project-URL: Homepage, https://checkxrechnung.com
Project-URL: Documentation, https://checkxrechnung.com/en/docs
Project-URL: Repository, https://github.com/wenboteng/xrechnung-validator
Project-URL: API waitlist, https://checkxrechnung.com/api-waitlist
Project-URL: Changelog, https://checkxrechnung.com/changelog
Keywords: xrechnung,zugferd,e-invoicing,en16931,validator,einvoice,germany
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Office/Business :: Financial
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.31
Dynamic: license-file

# xrechnung-check

Command-line client for the free, keyless XRechnung / ZUGFeRD validator API.

```bash
pip install xrechnung-check
xrechnung-check invoice.xml
xrechnung-check invoice.xml --json
xrechnung-check zugferd invoice.pdf
xrechnung-check extract invoice.pdf
```

Until the package is on PyPI, install it from a checkout:

```bash
pip install ./cli
```

`FILE` is an XRechnung XML document (UBL or CII) or a ZUGFeRD PDF. The command posts it as multipart field `file` to `https://checkxrechnung.com/v1/validate`. Python 3.9+. The only dependency is `requests`.

No API key. Free limit: 50 validations per IP per UTC day, 10 per minute, shared with the ZUGFeRD routes. `FILE` on the default command is at most 5 MB. `zugferd` and `extract` accept a PDF up to 10 MB and call `POST /v1/zugferd/validate` and `POST /v1/zugferd/extract`. HTTP 429 carries `Retry-After`. Higher volume: https://checkxrechnung.com/api-waitlist

Human output lists each issue with its rule id and `rule_url`. If the API omits `rule_url`, the CLI uses `https://checkxrechnung.com/fehler/<code>` (lowercase). `--json` prints a normalized report: `valid`, `errors[]` with `rule_id` and `rule_url`, plus summary fields from the API.

| Exit | Meaning |
| --- | --- |
| 0 | `ok` was true |
| 1 | the file is invalid, or it is not an e-invoice |
| 2 | usage error, unreadable file, or the API could not be reached |

Docs: https://checkxrechnung.com/en/docs · Rules: https://checkxrechnung.com/fehler/ · OpenAPI: https://checkxrechnung.com/openapi.json

MIT. Copyright (c) 2026 Bobook Limited.
