| name | pdforge |
| description | PDForge (PDF Noodle) API for generating PDFs from templates or HTML via curl. |
| vm0_secrets | PDFORGE_API_KEY |
PDForge API (PDF Noodle)
Use the PDForge API via direct curl calls to generate PDFs from templates or raw HTML.
Official docs:
https://docs.pdforge.com/
Note: PDForge has been rebranded to PDF Noodle. Both api.pdforge.com and api.pdfnoodle.com work.
When to Use
Use this skill when you need to:
- Generate PDFs from reusable templates with dynamic data
- Convert HTML to PDF directly
- Create invoices, reports, or documents programmatically
- Export PNG images instead of PDFs
- Batch generate documents using async endpoints with webhooks
Prerequisites
- Sign up at PDF Noodle (formerly PDForge)
- Go to the API Keys menu in the dashboard
- Copy your API key (format:
pdfnoodle_api_xxxxx) - Store it in the environment variable
PDFORGE_API_KEY
export PDFORGE_API_KEY="pdfnoodle_api_your-key-here"
Important: When using
$VARin a command that pipes to another command, wrap the command containing$VARinbash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq .
How to Use
All examples below assume you have PDFORGE_API_KEY set.
Base URL: https://api.pdfnoodle.com/v1
1. Generate PDF from Template (Sync)
Generate a PDF using a pre-built template with dynamic data.
Write to /tmp/pdforge_request.json:
{
"templateId": "your-template-id",
"data": {
"name": "John Doe",
"date": "2025-01-15",
"items": [
{"description": "Item 1", "price": 100},
{"description": "Item 2", "price": 200}
]
}
}
Then run:
bash -c 'curl -s -X POST "https://api.pdfnoodle.com/v1/pdf/sync" --header "Authorization: Bearer ${PDFORGE_API_KEY}" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json' | jq .
Response:
{
"signedUrl": "https://storage.googleapis.com/...",
"executionTime": 1234
}
The signedUrl is a temporary URL (expires in 1 hour) to download the generated PDF.
2. Generate PDF from Template (Async)
For batch processing, use the async endpoint with a webhook.
Write to /tmp/pdforge_request.json:
{
"templateId": "your-template-id",
"webhook": "https://your-server.com/webhook",
"data": {
"name": "Jane Doe",
"amount": 500
}
}
Then run:
bash -c 'curl -s -X POST "https://api.pdfnoodle.com/v1/pdf/async" --header "Authorization: Bearer ${PDFORGE_API_KEY}" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json' | jq .
Response:
{
"requestId": "abc123"
}
The webhook will receive the signedUrl when generation is complete.
3. Convert HTML to PDF (Sync)
Convert raw HTML directly to PDF without a template.
Write to /tmp/pdforge_request.json:
{
"html": "<html><body><h1>Hello World</h1><p>This is a PDF generated from HTML.</p></body></html>"
}
Then run:
bash -c 'curl -s -X POST "https://api.pdfnoodle.com/v1/html-to-pdf/sync" --header "Authorization: Bearer ${PDFORGE_API_KEY}" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json' | jq .
4. Convert HTML to PDF with Styling
Include CSS for styled PDFs.
Write to /tmp/pdforge_request.json:
{
"html": "<html><head><style>body { font-family: Arial; } h1 { color: #333; } .invoice { border: 1px solid #ddd; padding: 20px; }</style></head><body><div class=\"invoice\"><h1>Invoice #001</h1><p>Amount: $500</p></div></body></html>"
}
Then run:
bash -c 'curl -s -X POST "https://api.pdfnoodle.com/v1/html-to-pdf/sync" --header "Authorization: Bearer ${PDFORGE_API_KEY}" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json' | jq .
5. Generate PNG Instead of PDF
Set convertToImage to true to get a PNG.
Write to /tmp/pdforge_request.json:
{
"html": "<html><body><h1>Image Export</h1></body></html>",
"convertToImage": true
}
Then run:
bash -c 'curl -s -X POST "https://api.pdfnoodle.com/v1/html-to-pdf/sync" --header "Authorization: Bearer ${PDFORGE_API_KEY}" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json' | jq .
6. Download Generated PDF
After getting the signedUrl, download the PDF:
SIGNED_URL="https://storage.googleapis.com/..."
curl -s -o output.pdf "${SIGNED_URL}"
Request Parameters
Template Endpoint Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
templateId |
string | Yes | Template ID from dashboard |
data |
object | Yes | Variables for the template |
webhook |
string | Async only | Webhook URL for delivery |
convertToImage |
boolean | No | Return PNG instead of PDF |
metadata |
object | No | PDF metadata (title, author, etc.) |
hasCover |
boolean | No | Hide header/footer on first page |
debug |
boolean | No | Enable debug mode |
HTML Endpoint Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
html |
string | Yes | HTML content to convert |
convertToImage |
boolean | No | Return PNG instead of PDF |
metadata |
object | No | PDF metadata settings |
pdfParams |
object | No | PDF generation options |
Metadata Object
{
"metadata": {
"title": "Invoice #001",
"author": "Company Name",
"subject": "Monthly Invoice",
"keywords": ["invoice", "payment"]
}
}
Guidelines
- Use templates for reusable documents: Create templates in the dashboard for invoices, reports, etc.
- Use HTML endpoint for one-off documents: When you don't need a reusable template
- Use async for batch processing: Async endpoint is better for generating many PDFs
- Download promptly: Signed URLs expire in 1 hour
- Include CSS inline: For HTML to PDF, include all styles in the HTML