#Scribo Documentation
Scribo is a free, EN 16931-compliant e-invoicing tool. It generates invoices in the format each jurisdiction requires — today ZUGFeRD and XRechnung for Germany and a plain PDF for the United States; Factur-X (France), Facturae (Spain), and Peppol BIS UBL (Belgium and other EU countries) are coming soon. No credit card — sign in with a magic link sent to your sender email.
It is the same engine that powers scribo.causaprima.ai, available through five surfaces. Pick one:
| Surface | When to use | Reference |
|---|---|---|
| Web UI | One-off invoice from a browser. | scribo.causaprima.ai |
| HTTP API | Server-side integration, partner products. | API reference |
| MCP server | Claude Desktop, Cursor, Cline, ChatGPT App, OpenAI Codex CLI, or any MCP client — hosted at scribo.causaprima.ai/mcp. |
MCP guide |
| CLI | Shell scripts, CI pipelines, terminal workflows. | CLI reference |
| Skill | Installable skill for Claude Code (/plugin install), Claude.ai / Claude Desktop / Cowork / ChatGPT (.zip upload), or OpenAI Codex CLI (git clone). |
Skill guide |
All five paths talk to the same /api/v1 API. Whichever you pick, your sender.contact_email is your login — same email across surfaces means the same account.
#Quickstart
The fastest path from zero to a downloadable PDF:
# 1. Install the CLI globally (or use npx)
npm install -g @causaprima/scribo-cli
# 2. Generate an invoice
scribo create \
--sender-name "Example GmbH" --sender-country DE \
--sender-address "Example Allee 1" --sender-postcode 10115 --sender-city Berlin \
--sender-tax-id DE123456788 --sender-email billing@example.com \
--recipient-name "Acme GmbH" --recipient-country DE \
--recipient-address "Hauptstrasse 1" --recipient-postcode 10117 --recipient-city Berlin \
--recipient-email ap@acme.example \
--line "Consulting,3,1200,19,DAY,S" \
--currency EUR --due-date 2026-06-01 \
-o invoice.pdf
The output is a ZUGFeRD COMFORT hybrid (PDF/A-3 with embedded EN 16931 CII XML). On the first invoice for a sender email the CLI prompts for the 6-digit verification code Scribo emails you; the same email carries the magic link for signing back in and re-downloading.
#What Scribo generates
| Jurisdiction | Default format | Status |
|---|---|---|
| Germany — B2B | ZUGFeRD COMFORT (PDF/A-3 + CII XML) | GO |
| Germany — B2G (federal) | XRechnung UBL (triggered by leitweg_id) |
GO |
| United States | Plain PDF | GO |
| France | Factur-X EN 16931 | Coming soon |
| Spain | Facturae 3.2.2 | Coming soon |
| Belgium, Netherlands, Luxembourg, Austria | Peppol BIS 3.0 UBL | Coming soon |
| Italy, Mexico, Brazil | Plain PDF with submission banner | Coming soon |
Full priority chain and per-format details: jurisdictions.
#What Scribo does not do
- Tax advice. Scribo never infers the tax category code. The caller picks one of
S/Z/E/AE/K/G/Oper EN 16931. - OCR or invoice reading. Scribo is generate-only. Reading an existing invoice PDF is a different tool.
- Delivery to the recipient. Scribo returns a download URL and emails the sender a magic-link sign-in. The caller delivers the invoice to the recipient themselves.
- Credit notes or other document types beyond commercial invoices. Deferred to a later release.
#Compliance posture
Scribo emits invoices conforming to EN 16931-1:2017 with the relevant national CIUS. Every EN 16931 output (ZUGFeRD, XRechnung) runs through Invopop's hosted validator before the bytes are returned — output that fails the rule set never reaches the user. US plain PDFs carry no EN 16931 XML and are rendered directly. See /compliance for the trust posture, retention defaults, sub-processor list, and the per-format support status.
#Reference
- API reference — REST endpoints, schemas, errors
- Jurisdictions — format priority chain
- Tax category codes — EN 16931 S/Z/E/AE/K/G/O
- Troubleshooting — error codes and fixes