A Directus Flow operation for PolyDoc, a REST API that converts HTML or URLs to PDF, captures screenshots, and generates EU-compliant e-invoices (Factur-X / ZUGFeRD hybrid PDF/A-3).
One operation, three use cases:
- HTML/URL to PDF - layout, margins, page format, page ranges, bookmarks, accessible/tagged PDFs.
- Capture Screenshot - PNG / JPEG / WebP, full page, viewport and device-pixel-ratio control.
- Generate E-Invoice - Factur-X or ZUGFeRD, profiles from
minimumtoextended.
Content can come from a URL, an inline HTML string, or a saved template (with Liquid templateData). By default the generated file is saved straight into Directus Files and the operation returns the new file's fileId, so a following operation can attach it to a record. You can also return it as base64, upload it to your cloud storage (presigned URL), or deliver it to a webhook.
This is a standard (non-sandboxed) API extension, so it installs on self-hosted Directus:
- Marketplace (self-hosted with
MARKETPLACE_TRUST=all): search fordirectus-extension-polydoc. - Manual:
npm install directus-extension-polydocinto your project, or drop the builtdist/into yourextensions/directory, then restart Directus.
It is not installable on Directus Cloud (which only runs sandboxed extensions; the sandbox has no access to the Files service or binary responses).
Add the PolyDoc operation to a Flow and pick an operation, a source, and a delivery mode.
- API Key: paste a key from dashboard.polydoc.tech, or leave it blank to read the
POLYDOC_API_KEYenvironment variable (recommended, keeps the key out of the flow definition). Sent asAuthorization: Bearer <key>. - Sandbox: run against sandbox quota (watermarked output) for testing.
- Delivery:
- Save to Directus File (default) returns
{ fileId, filename, contentType, sizeBytes }. - Base64 returns
{ base64, ... }. - Cloud Storage / Webhook return the PolyDoc JSON receipt.
- Save to Directus File (default) returns
Every operation has an Advanced (JSON) option that is deep-merged into the request body, so any API capability not surfaced as a control (pdf.watermark, pdf.pdfa, pdf.encryption, render.*, request.*) is still reachable. See the full request schema at docs.polydoc.tech.
examples/ holds three reference Flow definitions, one per angle (the Directus analog of the n8n template trio):
url-screenshot.flow.json- screenshot a URL and store the PNG.pdf-from-template.flow.json- render a saved template to a branded PDF.einvoice-from-record.flow.json- turn a new invoice record into a ZUGFeRD / Factur-X PDF.
npm install
npm run build # @directus/extensions-sdk -> dist/app.js + dist/api.js
npm run validate # SDK conformance check
npm run lint
npm test # unit tests (request body builder)
npm run scrub:checkLive smoke test against the real API (uses sandbox quota):
POLYDOC_API_KEY=api_xxx POLYDOC_TEMPLATE_ID=jlE-whg npm run test:integration