What’s new
POST /api/v1/e-invoice/render now supports two delivery modes. The
default, delivery.mode = inline_pdf, returns the PDF/A-3b bytes inline
exactly as before. Setting delivery.mode = object instead returns a JSON
job descriptor and stores the render outputs as artifacts you download
separately — for pipelines that need the embedded XML or the validation
report alongside the PDF, or that hand the outputs to another system.
The endpoint family
| Endpoint | Auth | Purpose |
|---|---|---|
POST /api/v1/e-invoice/render |
Required | Render. Returns inline PDF or a job descriptor. |
GET /api/v1/e-invoice/jobs/{job_id} |
Required | Poll an object-mode job. |
GET /api/v1/e-invoice/jobs/{job_id}/artifacts/{artifact} |
Required | Download a job artifact. |
GET /api/v1/e-invoice/capabilities |
None | Static capability registry (advertises delivery and residency modes). |
Job lookup and artifact download authenticate with the same Bearer token that created the job.
Artifacts
{artifact} is one of:
pdf— the signed PDF/A-3b documentxml— the embedded CII XMLreport— validation report (only whenreport.enabled = true)request— original request body (only whenretention.store_request = true)
The job descriptor lists available, content_type, bytes,
expires_at_ms, and a download URL per artifact; the URL carries its own
expiry and is fetched with the same Bearer token.
Lifetime controls
delivery.url_ttl_seconds(range1..900, default300) bounds how long artifact download URLs stay valid.retention.ttl_hours(range1..23, default23) bounds the artifacts and job metadata themselves. After it elapses, artifact downloads return404and job lookup returns metadata only.
Data residency
settings.e_invoice.data_residency picks where object-mode artifacts are
stored: auto resolves eu / global from the invoice country (e.g.
DE → eu, US → global), eu and global force a profile, and
strict = true makes an unresolvable country a hard API-002 error
rather than a fallback.
Compatibility
Object delivery is opt-in. Requests that omit delivery — or set
delivery.mode = inline_pdf — behave exactly as before: inline PDF,
no job created, nothing stored.
See the E-invoice API reference for the full contract, including the two end-to-end validation flows.