Render
One render: a template, HTML or URL render, or the result of a PDF tool. Every key is always there, with null where it does not apply.
The render id: rnd_ and 32 hexadecimal digits.
rnd_7da09ab6cd9946b798c187c2a9350852queued (waiting for a render slot), rendering, then succeeded or failed.
Possible values: [queued, rendering, succeeded, failed]
PDF and image templates, ad-hoc HTML and URLs produce pdf, png, jpg or webp; a docx template produces docx or pdf, a pptx template pptx or pdf.
Possible values: [pdf, png, jpg, webp, docx, pptx]
Link to the file. A PDF or office file is served as a download (Content-Disposition: attachment), an image inline under its name; download=1 on the link makes an image a download too. A signed link works for seven days at most (expires_at); a public output has a plain URL that works until the output expires. Null while queued, for a failed render, and once the output was deleted or has expired. Read the render again for a fresh signed link.
When download_url stops working: for a signed link the earlier of seven days and the end of the retention, for a public link the end of the retention. Null without a link, and for a public output that never expires.
Size of the file in bytes.
Pages of a PDF; null for other outputs and while queued.
Units this render cost: a PDF one per started five pages, an image or a Word or PowerPoint file one, a PDF tool step 0.5, plus 0.5 per post step and 1 for an e-invoice. 0 for test keys and for an answer from the dedup cache.
1Where a workspace renders and stores. Every workspace is in eu (Frankfurt) today.
Possible values: [eu, us, apac]
test when a test key made it: free, kept a day at most, marked on the Free plan.
Possible values: [live, test]
template objectnullablerequired
The template and version that rendered; null for HTML, URL and PDF tool renders and for an answer from the dedup cache.
The id of the template as GET /templates returns it. A render request takes it as template.
tpl_3c9a0e5b7d1f4a2c8e6b0d4f2a7c9e1binvoice-deThe version number that rendered.
The release channel the version came from (published by default); null when the request named a version number or latest.
True when the channel's canary share picked this version.
Null until the render has succeeded. What produced the file, for reproducibility: the Chromium version and the template language (none for plain HTML and URLs); the office converter for Word and PowerPoint templates and conversions; the PDF library and the step for the PDF tools (pdf-lib; pdf merge).
chromium 140.0.7339.16; engine jinja2Checksum of the template version that rendered; null for HTML, URL and PDF tool renders. Two renders with the same checksum used the same template content.
SHA-256 of the output file, as hexadecimal.
true when the answer came from the dedup cache; see dedupe.
storage objectnullablerequired
The output's copy in the workspace's own bucket; null when none applies (no connection,
storage: false, a test render the connection does not take, a plan without bring your own
storage). While the connection is paused after failures, the copy is recorded as failed
with reason connection_paused and can be delivered again once the connection passes its
test. A synchronous response reports pending: the copy is made in the background, and
storage.delivered or storage.failed follow as webhook events.
Possible values: [pending, delivered, failed]
fennlor-docsformfeed/2026/09/rnd_7da09ab6cd9946b798c187c2a9350852/invoice.pdfThe object below the connection's public_base_url; null without one.
Why a delivery failed: the credentials or bucket (permanent), the object (rejected), retries used up (exhausted), the output expired first (source_gone), the connection was paused after failures (connection_paused) or deleted (connection_deleted), the plan lost bring your own storage (plan), or the workspace was deleted (workspace_deleted).
Possible values: [permanent, rejected, exhausted, source_gone, connection_deleted, connection_paused, plan, workspace_deleted]
error objectnullable
The provider's answer, reduced: its code, the HTTP status and the first line of its message.
AccessDenied403Access Deniedeinvoice objectnullablerequired
The e-invoice of this render: what was made, what the validator said and whether the PDF shows what the XML states. Null for a render that made none. A failed render keeps it too, which is where it says why.
Possible values: [basic, en16931]
Possible values: [factur-x, zugferd]
The release of the specification the file was written and validated for, under the name of flavour: Factur-X 1.09 is ZUGFeRD 2.5.
1.09A link to the XML, made like the render's download_url (signed, or the plain URL of a public output), when the render asked for xml: both and the file is still stored. The XML is inside the PDF either way.
validation objectnullable
What the validator said about the file. Null only when the render failed before it ran.
No finding of severity error. A render succeeds only with a valid file.
The rule set the XML was held to, as it names itself, and the validator that ran it.
Factur-X 1.09.2 (Mustang 2.26.0)The PDF/A flavour the file was checked against; null when validation ended at the XML.
PDF/A-3bmessages object[]
At most 50, errors first.
Whether the finding is about the invoice XML or about the PDF/A file.
Possible values: [xml, pdf]
Possible values: [error, warning]
The rule: of EN 16931 (BR-…), of the syntax binding (CII-SR-…), a code of the XML schema (cvc-…), or the clause of PDF/A (6.2.11.4.1-1). Null where the validator names none.
BR-CO-25Where: an XPath into the XML (a line item always carries its index), a line and column for a finding of the XML schema, or the object of the PDF.
Present and true when there were more findings than messages holds.
The validator's own id for this report. Quote it when you ask about a render; renders before 9 October 2026 have none.
6f2c7e9a-1d4b-4c3e-8a5f-2b7d9e0c1a34versions object
The versions of the validator's parts that judged the file. The pinned versions are listed in the documentation.
SHA-256 of the XML that was judged: the XML inside the PDF, and the file xml_url links.
3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1bSHA-256 of the PDF that was judged. For a render that succeeded it is the delivered file and equals the render's output_sha256; null where the validator refused the XML before there was a converted file.
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08display objectnullable
The display check: the values of the XML that were looked for in the text of the PDF, by their business term in EN 16931.
["BT-1","BT-109","BT-110","BT-112"]The terms the PDF does not show. Zero amounts are not looked for.
[]accessibility objectnullablerequired
What the validator said about the file as PDF/UA-1. Null unless the render set settings.pdf.ua. A strict render that failed keeps it too, which is where it names the rules.
Possible values: [PDF/UA-1]
Possible values: [strict, report]
The file passed every rule the validator checks. Only then does it carry the PDF/UA identifier.
The validator and its version. Its rule set moves between releases.
veraPDF 1.30.2rules object
1060failures object[]
The rules the file failed, at most 20.
Clause and test number of the rule in veraPDF's PDF/UA-1 profile.
7.4.2-1What in the template the rule is about, where the template check found it. Absent for a rule it has no finding for.
Possible values: [document-title, image-alt, figure-name, heading-order, table-rows, table-cell-empty, masked-text]
How many checks of the rule failed.
What to change in the template, else the validator's own description of the rule.
This h3 follows an h1, so a heading level is skipped. Make it an h2 and size it with CSS.The start tags of the elements concerned, at most five.
["<h3>"]warnings object[]
What a reader will stumble over although no rule fails for it.
Possible values: [filtered-text, document-language, table-headers, link-name, generated-text, fixed-text, running-text]
Start tags, or the text itself for running-text and generated-text; at most five.
Present and true when more rules failed than failures holds.
timings objectnullablerequired
Milliseconds per phase of a render that succeeded; null while it is queued or rendering and when it failed. A synchronous answer also sends them as Server-Timing.
Waiting for a render slot; only in the answer of a synchronous request, where it is 0.
Filling the template.
In the browser.
Post-processing, the e-invoice and the PDF/UA check included.
Storing the file.
From start to finish; 0 for an answer from the dedup cache, which has no other phase.
error objectnullablerequired
Why a failed render failed, as the render stored it. Null unless status is failed; GET /renders/{id}/result answers the same failure as a full problem.
The code of the problem the failure answers with. worker_exhausted is a render that failed every attempt of the queue; its message is the last attempt's.
Possible values: [template_syntax_error, template_runtime_error, navigation_failed, render_timeout, page_limit_exceeded, output_too_large, invalid_request, source_not_found, source_invalid, source_encrypted, tool_failed, file_type_unsupported, office_document_invalid, office_document_too_large, office_conversion_failed, office_unavailable, unsupported_in_office, test_output_unavailable, einvoice_data_invalid, einvoice_display_mismatch, pdfa_conversion_failed, conformance_unavailable, pdfua_validation_failed, worker_exhausted]
What went wrong, in English.
Template errors of an HTML template: the line, from 1.
And the column, from 1.
Template errors: the template language.
Possible values: [jinja2, liquid, handlebars]
Word and PowerPoint templates: the part of the file.
word/document.xmlWord and PowerPoint templates: the paragraph within the part, from 1.
diagnostics object[]
Word and PowerPoint templates: every finding about the tags of the file.
error: a render (or, for data, validate_data) would fail; warning and info are advice.
Possible values: [error, warning, info]
The finding in English.
A stable name for the kind of finding.
location object
Where in the template source, line and column from 1.
Data errors only: where in the data, e.g. data.invoice.lines[0].qty.
Word and PowerPoint templates only: the file part the tag is in, e.g. word/document.xml or ppt/slides/slide2.xml.
Word and PowerPoint templates only: the 1-based paragraph in part, as the template page lists it.
page_limit_exceeded: the pages the document has.
What the converter or validator said (office_conversion_failed, source_invalid, pdfa_conversion_failed, tool_failed).
The part of an office file the error is about.
office_document_too_large: the limit in bytes.
errors object[]
einvoice_data_invalid: every field of the _invoice block that is missing or breaks a rule.
BR-CO-15worker_exhausted: how often the queue tried.
office_unavailable, conformance_unavailable: the seconds the busy service asked for.
Why a failed render failed, as the render stored it. Null unless status is failed; GET /renders/{id}/result answers the same failure as a full problem.
meta objectrequired
The meta of the request, unchanged.
The meta of the request, unchanged.
When the render succeeded or failed; null while queued or rendering.
{
"id": "rnd_7da09ab6cd9946b798c187c2a9350852",
"status": "queued",
"output": "pdf",
"download_url": "string",
"expires_at": "2024-07-29T15:51:28.071Z",
"bytes": 0,
"page_count": 0,
"units": 1,
"region": "eu",
"environment": "live",
"template": {
"id": "tpl_3c9a0e5b7d1f4a2c8e6b0d4f2a7c9e1b",
"slug": "invoice-de",
"version": 0,
"channel": "string",
"canary": true
},
"engine_version": "chromium 140.0.7339.16; engine jinja2",
"template_checksum": "string",
"output_sha256": "string",
"deduplicated": true,
"storage": {
"status": "pending",
"bucket": "fennlor-docs",
"key": "formfeed/2026/09/rnd_7da09ab6cd9946b798c187c2a9350852/invoice.pdf",
"url": "string",
"reason": "permanent",
"error": {
"code": "AccessDenied",
"http_status": 403,
"message": "Access Denied"
}
},
"einvoice": {
"profile": "basic",
"flavour": "factur-x",
"spec_version": "1.09",
"xml_url": "string",
"validation": {
"valid": true,
"schematron": "Factur-X 1.09.2 (Mustang 2.26.0)",
"pdfa": "PDF/A-3b",
"messages": [
{
"part": "xml",
"severity": "error",
"rule": "BR-CO-25",
"message": "string",
"location": "string"
}
],
"truncated": true,
"id": "6f2c7e9a-1d4b-4c3e-8a5f-2b7d9e0c1a34",
"versions": {
"mustang": "2.26.0",
"verapdf": "1.30.2",
"pdfbox": "3.0.8"
},
"xml_sha256": "3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b",
"pdf_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
},
"display": {
"checked": [
"BT-1",
"BT-109",
"BT-110",
"BT-112"
],
"missing": []
}
},
"accessibility": {
"standard": "PDF/UA-1",
"check": "strict",
"conformant": true,
"validator": "veraPDF 1.30.2",
"rules": {
"passed": 106,
"failed": 0
},
"failures": [
{
"rule": "7.4.2-1",
"code": "document-title",
"count": 0,
"message": "This h3 follows an h1, so a heading level is skipped. Make it an h2 and size it with CSS.",
"elements": [
"<h3>"
]
}
],
"warnings": [
{
"code": "filtered-text",
"count": 0,
"elements": [
"string"
]
}
],
"truncated": true
},
"timings": {
"queue_ms": 0,
"compile_ms": 0,
"render_ms": 0,
"post_ms": 0,
"upload_ms": 0,
"total_ms": 0
},
"error": {
"code": "template_syntax_error",
"message": "string",
"line": 0,
"column": 0,
"engine": "jinja2",
"part": "word/document.xml",
"paragraph": 0,
"diagnostics": [
{
"severity": "error",
"message": "string",
"code": "string",
"location": {
"line": 0,
"column": 0
},
"path": "string",
"part": "string",
"paragraph": 0
}
],
"page_count": 0,
"reason": "string",
"entry": "string",
"limit": 0,
"errors": [
{
"path": "string",
"message": "string",
"rule": "BR-CO-15"
}
],
"attempts": 0,
"retry_after": 0
},
"meta": {},
"created_at": "2024-07-29T15:51:28.071Z",
"completed_at": "2024-07-29T15:51:28.071Z"
}