User Guide
API Reference
SDKs

User Guide

Everything you need to know about using PDFModule

Settings & Account

The Settings page allows you to manage your connection, account, and preferences.

Account

  • Connection Status - Shows whether you're connected to PDFModule cloud
  • Email - Your registered email address
  • Plan - Your current subscription plan
  • Test Connection - Verify API connectivity
  • Log Out - Sign out (removes stored credentials)

Telemetry

PDFModule can collect anonymous usage data to help improve the product:

  • Toggle telemetry on/off
  • View sample data to see what would be collected
  • Only app usage patterns are collected, never file contents

About

  • App version number
  • Links to website and support

Troubleshooting

Connection Issues

Problem: "Connection failed" or "Offline" status

  • Check your internet connection
  • Go to Settings and click "Test Connection"
  • Try logging out and back in
  • Check if a firewall is blocking the app
  • Verify PDFModule services are online at status page

Upload Failures

Problem: Files stuck in "Uploading" status

  • Check the PDF isn't corrupted (try opening in a PDF viewer)
  • Verify stable internet connection
  • Try a smaller file to test
  • Restart the app and retry the job

Processing Errors

Problem: Jobs show "Error" status

  • Click the job to see the error message
  • Common causes: corrupted PDF, encrypted/password-protected file, extremely large file
  • Try the "Retry" button for temporary errors

Hot Folder Not Processing

Problem: PDFs in hot folder aren't being processed

  • Verify the hot folder is enabled (shows "Active" badge)
  • Check that the watch path still exists
  • Ensure the app is running (hot folders don't work if app is closed)
  • Try disabling and re-enabling the hot folder
  • Check if the file is still being written (wait for completion)

macOS Gatekeeper

Problem: "App cannot be opened because the developer cannot be verified"

xattr -cr /Applications/PDFModule.app

Or: Right-click the app, select "Open", then click "Open" in the dialog.

Windows SmartScreen

Problem: "Windows protected your PC" warning

  1. Click "More info"
  2. Click "Run anyway"

Understanding Preflight Results

Severity Levels

SeverityMeaningAction
FAIL Critical issue that will cause problems Must fix before production
WARN Potential issue that may affect quality Review and fix if needed
INFO Informational note, not a problem For awareness only
PASS Check passed successfully No action needed

Overall Status

  • passed - All checks passed with no warnings or failures
  • warning - No failures, but has warnings
  • failed - Has one or more failures

Best Practices

  • Always fix FAIL issues before printing
  • Review WARN issues with your print provider
  • Run preflight again after applying fixes
  • Keep original files - never overwrite source documents
  • Document your profile settings for consistency

Production Workflows

Automated Print Workflow

# Example: Automated preflight and fix workflow

1. Customer uploads PDF to portal
2. Webhook triggers your backend
3. Your backend calls preflight API:
   POST /api/v1/preflight

4. If issues found, apply fixes:
   POST /api/v1/preflight/fix

5. Generate preflight report for customer
6. If passed, route to production queue
7. If failed, notify customer with report

Hot Folder Workflow

# Desktop App Hot Folder Setup

Watch Folder: /Volumes/Server/Incoming
Output Folder: /Volumes/Server/Approved
Error Folder: /Volumes/Server/NeedsReview
Profile: print_standard
Mode: Preflight and Fix

Result:
- Valid PDFs automatically fixed and moved to Approved
- Problem PDFs moved to NeedsReview for manual check

Integration Example (Node.js)

const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');

async function preflightPDF(filePath) {
  const form = new FormData();
  form.append('file', fs.createReadStream(filePath));
  form.append('profile', 'print_standard');

  const response = await axios.post(
    'https://pdfmodule.com/api/v1/preflight',
    form,
    {
      headers: {
        'X-API-Key': process.env.PDFMODULE_API_KEY,
        ...form.getHeaders()
      }
    }
  );

  const result = response.data;

  if (result.summary.failures > 0) {
    // Apply recommended fixes
    const fixResponse = await axios.post(
      'https://pdfmodule.com/api/v1/preflight/fix',
      {
        file_id: result.file_id,
        fixes: result.recommended_fixes
      },
      {
        headers: { 'X-API-Key': process.env.PDFMODULE_API_KEY }
      }
    );
    return fixResponse.data;
  }

  return result;
}

Account Setup

Create your PDFModule account at pdfmodule.com/register. You'll need:

  • Email address
  • Password (minimum 8 characters)
  • Company name (optional)

Plans

PlanPricePDFs/monthFixes/monthStorage
Free$010057 days
Production$495,00050030 days
Scale$19950,00020,000365 days
EnterpriseCustomUnlimitedUnlimited365 days

Dashboard Overview

Your dashboard shows key metrics and quick access to common actions:

  • API Calls - Requests this month
  • Templates - Your template count
  • PDFs Generated - Total documents created
  • Quota - Usage vs limit
  • Recent Documents - Last 5 generated PDFs
  • API Activity - Recent API calls

Your First Template

Templates are HTML documents with variables that get replaced with your data.

Creating a Template

  1. Go to Templates > Create Template
  2. Enter a name (e.g., "Invoice")
  3. Select document type and page settings
  4. Write your HTML with variables
  5. Click Save

Example Template

<h1>Invoice #{{invoice_number}}</h1>
<p>Customer: {{customer_name}}</p>
<table>
  {{#each items}}
  <tr>
    <td>{{description}}</td>
    <td>{{quantity}}</td>
    <td>${{price}}</td>
  </tr>
  {{/each}}
</table>
<p><strong>Total: ${{total}}</strong></p>

Your First API Call

Get an API Key

  1. Go to API Keys
  2. Enter a name and select environment (test/live)
  3. Click Create
  4. Copy the key immediately (shown only once)

Render a PDF

curl -X POST https://pdfmodule.com/api/v1/render \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "invoice",
    "data": {
      "invoice_number": "INV-001",
      "customer_name": "Acme Corp",
      "items": [
        {"description": "Widget", "quantity": 10, "price": "99.00"}
      ],
      "total": "990.00"
    }
  }'

Understanding Templates

Templates consist of:

  • Body HTML - Main content (required)
  • Header HTML - Top of each page (optional)
  • Footer HTML - Bottom of each page (optional)
  • CSS Styles - Styling rules (optional)

Creating Templates

Settings

  • Name & Slug - Identifier for API calls
  • Document Type - invoice, report, certificate, contract, custom
  • Page Size - A4, Letter, Legal
  • Orientation - Portrait, Landscape
  • Margins - Top, Right, Bottom, Left (mm)

Variables & Helpers

Variables

{{variable}}
{{object.property}}
{{#each items}}...{{/each}}
{{#if condition}}...{{else}}...{{/if}}

Helpers

{{formatCurrency amount "USD"}}
{{formatDate date "M j, Y"}}
{{formatNumber value 2}}
{{uppercase text}}
{{page}} / {{pages}}

Template Versioning

Every save creates a new version. Use specific versions in API calls:

{
  "template": "invoice",
  "version": 2,
  "data": {...}
}

API Keys

  • Test Keys (pm_test_) - For development, limited requests
  • Live Keys (pm_live_) - For production, counts against quota

Security

  • Never commit keys to repositories
  • Use environment variables
  • Rotate keys periodically
  • Revoke unused keys

Documents

Each rendered PDF creates a document with:

  • Unique UUID
  • Page count and file size
  • Render metadata
  • Expiration based on plan

Retention

PlanStorage
Free7 days
Production30 days
Scale/Enterprise365 days

Team Management

Available on Production, Scale, and Enterprise plans.

Pricing

  • $19/month per team member
  • +1,000 PDFs added to monthly quota

Roles

  • Owner - Full access, manages billing
  • Admin - Most permissions, can invite members
  • Member - Configurable permissions

Permissions

  • Templates: view/edit team templates
  • Documents: view/download team documents
  • API Keys: view team keys
  • Team: view members, invite
  • Billing: view billing info

Billing & Plans

Upgrading

  1. Go to Settings > Plan & Billing
  2. Click Upgrade on desired plan
  3. Complete Stripe checkout
  4. Plan activates immediately

Managing Subscription

Click Manage Billing to access Stripe portal for:

  • Update payment method
  • Download invoices
  • Cancel subscription

Auto-Upgrade

If you exceed limits with a payment method on file, you'll be automatically upgraded to the next plan tier.