PDFPipe

Changelog

What's new in PDFPipe

Features, fixes, and API changes. Most recent first. Questions or issues: hello@pdfpipe.xyz.

  1. API key expiry, Zapier integration, batch docs, usage CSV export, auto-retry, render presets, and annual pricing

    Nine platform updates: new key management controls, a Zapier integration, documented batch endpoint, usage data export, automatic retry on transient failures, render quality presets, named key labels, lifecycle email nudges, and annual billing with a 20% saving.

    • feature

      API key expiry dates (Growth and above): set an optional expiration date on any API key from the dashboard. Keys return 401 after the expiry timestamp. Useful for rotating credentials on a fixed schedule or granting time-limited access to contractors.

    • feature

      Zapier integration: generate PDFs directly from Zapier workflows. Pass HTML or a URL as input and connect the PDF output to any downstream Zapier action. Available in the Zapier app directory.

    • improvement

      Batch rendering docs: the batch endpoint (POST /v1/batch) is now fully documented in the API reference with request and response examples. Available on Growth and above.

    • feature

      Usage CSV export (Growth and above): download your render history as a CSV from the dashboard. Covers up to 90 days of data. Useful for cost allocation, auditing, or loading into a spreadsheet.

    • feature

      Auto-retry on transient failure (Growth and above): renders that encounter a transient infrastructure error are automatically retried once. Retried renders do not consume extra quota.

    • feature

      Render quality presets: pass preset: "invoice", "report", or "screenshot" on any render request to apply a curated set of margin, scale, and print defaults. Removes the need to manually tune options for common document types.

    • feature

      Named API key labels: give each API key a descriptive label from the dashboard. Labels appear in the key list and in audit log events, making it easier to track which integration a key belongs to.

    • improvement

      PostHog lifecycle emails: automated activation and conversion nudge emails now fire based on actual usage behavior. New signups receive a targeted sequence rather than a fixed drip. No change to the API.

    • feature

      Annual pricing: annual billing is now shown by default on the pricing page with a 20% saving over monthly rates. Monthly billing remains available.

  2. New rendering options, PDF merge, compare page improvements + platform fixes

    Six new API options, a PDF merge endpoint, overhauled competitor compare pages, real-time status page, and SEO improvements across use-case pages.

    • feature

      New option: header_html and footer_html. Pass any HTML string to render a running header or footer on every page. Class names .pageNumber, .totalPages, .date, .title, and .url are substituted automatically by the renderer. Margins widen from 1cm to 2cm when using defaults to prevent overlap.

    • api

      New endpoint: POST /v1/pdf/merge. Merge 2 to 20 PDFs into one document. Sources can be document IDs from your archive, public URLs, or base64-encoded bytes. Requires Starter plan or above. Returns PDF bytes or a stored document link when store: true.

    • feature

      New option: tabular_nums. When true, injects font-variant-numeric: tabular-nums globally before capture. Fixes inconsistent digit widths in tables and invoices (addresses the class of bug reported in Gotenberg issue #921).

    • feature

      New option: deduplicate_images. When true, post-processes the rendered PDF with pdf-lib to merge identical image XObjects. A logo appearing on 50 pages is stored once instead of 50 times. Addresses Gotenberg issue #1077.

    • feature

      New option: pdf_a. When true, adds PDF/A-1b XMP metadata to the document catalog. Best-effort: passes basic validators for simple documents. Response includes a warning noting that full conformance requires tagged document structure and an embedded ICC profile.

    • improvement

      New option: inject_css extended (existing option, now documented alongside the new options in the API reference).

    • improvement

      Status page now fetches GET /health on load and reflects real API status. Previously all components were hardcoded as operational regardless of actual system state.

    • improvement

      Compare pages for Gotenberg and PrinceXML substantially expanded. Gotenberg page now covers five specific named open issues (memory leaks, blank PDF regressions, duplicate image bloat #1077, digit rendering #921, -32000 large file errors) and maps each to the PDFPipe fix. PrinceXML page now covers serverless incompatibility, React/Vue/Angular blank output, and running headers parity.

    • improvement

      Docs: POST /v1/pdf/merge added to the endpoints table. Five new options (header_html, footer_html, tabular_nums, deduplicate_images, pdf_a) added to the options reference.

    • fix

      SEO: four use-case pages missing the 2026 year keyword in their title tag corrected (procurement, rental agreements, white-label reports, media kit). Use-cases index page now has an openGraph block.

    • improvement

      Changelog moved from top navbar to footer only.

    • fix

      Welcome page now silently retries the API key provisioning call for up to 30 seconds. Previously, if the payment webhook arrived slightly after the redirect, customers saw an error and had to manually refresh.

    • fix

      Worker: org API CORS headers corrected. Cross-origin requests to the org endpoints now return the right Access-Control-Allow-Origin header.

    • fix

      Worker: auth audit log events now correctly set resource_id on login and token-verify events.

    • improvement

      SDK and integration updates: pdfpipe-node@0.2.0 (npm), pdfpipe-python@0.2.0 (PyPI), pdfpipe-mcp-server@0.3.0 (npm), and n8n-nodes-pdfpipe@1.1.0 (npm) all updated with the five new rendering options. The n8n node also fixes a latent bug where format, landscape, margin, and print_background were being sent outside the options object and silently ignored.

  3. Enterprise org and invite system

    • feature

      Organizations: create an org, invite members by email, and manage roles from the dashboard. Business plan includes up to 5 seats.

    • feature

      Invite-accept flow: invited users land on /invite/[token], verify their email, and set a password in one step.

    • feature

      Dashboard: team owners see a sharable invite link and a member list with role badges.

    • api

      Audit log: org_create, member_add, and member_remove events now recorded with actor and target IDs.

    • fix

      Worker: orgCreateError now surfaces a user-readable message instead of a raw 500 when org name is already taken.

  4. Comprehensive bug sweep

    A sweep across worker and landing that fixed 14 issues found during internal testing.

    • fix

      Fixed silent failure when html field was an empty string. The endpoint now returns a clear 422 with a descriptive message.

    • api

      X-PDFPipe-Request-ID is now included on all error responses, not just successful renders. Makes tracing failures easier.

    • fix

      Demo endpoint rate-limit response was returning 500 on some edge cases. Now always 429 with a Retry-After header.

    • fix

      Analytics playground_render event was firing before the PDF blob was confirmed, causing a mismatch in render counts.

    • fix

      Accessibility: added sr-only labels to icon-only buttons in the dashboard, fixed form reset label, and corrected tab order on modals.

    • improvement

      Migrated all analytics calls from hardcoded URLs to the API_URL constant, so staging and production environments use separate analytics.

  5. n8n community node + MCP server

    • feature

      n8n-nodes-pdfpipe published to npm. Drop PDFPipe into any n8n workflow: generate invoices on order, certificates on signup, reports on a schedule.

    • feature

      pdfpipe-mcp-server published. Gives Claude, Cursor, or any MCP-compatible agent the ability to render real PDFs. npx pdfpipe-mcp-server to start.

    • improvement

      MCP server listed on pdfpipe.xyz/mcp with a full capability reference and agent prompt examples.

  6. Document archive + batch rendering

    • api

      Add store: true to any render request to persist the PDF to our CDN. Returns document_id and a pre-signed download URL.

    • api

      GET /v1/documents/:id returns document metadata (filename, size, created_at, expires_at) without downloading the full file.

    • api

      Batch endpoint: POST /v1/pdf/batch accepts an array of up to 250 render requests (limit depends on plan) and returns an array of PDFs or download URLs.

    • feature

      Dashboard document list: browse and download stored PDFs, see expiry dates, delete early.

    • feature

      Retention windows: 1 day (Hobby), 30 days (Starter), 1 year (Growth), 2 years (Scale and Business).

  7. Launch

    PDFPipe is live.

    • api

      POST /v1/pdf: send HTML or a URL, get a production-ready PDF back. A4, Letter, or custom page sizes. Headers, footers, page numbers, embedded fonts.

    • api

      GET /v1/demo: free live render endpoint, no API key needed. 10 renders per IP per day. Powers the playground on the home page.

    • feature

      Node.js SDK: npm install pdfpipe-node. Typed, two methods (render and renderToFile), works in Node 18+, Bun, and edge runtimes.

    • feature

      Python SDK: pip install pdfpipe-python. Works with Django, FastAPI, and plain scripts.

    • feature

      Hobby plan: 500 documents a month, free, no card, no expiry.

    • feature

      Dashboard: usage meter, API key management, render history, plan and billing.

What's coming

The roadmap is prioritized by what paying customers ask for. Current focus:

  • Make (Integromat) integration
  • SSO / SAML for Enterprise
  • Template library: store and version your HTML templates via the API
  • Usage alerts: email when you hit 80% of your monthly limit

Want something added? Email the founder directly. If three customers ask for the same thing, it ships.