PDForge (PDF Noodle) API for generating PDFs from templates or HTML via curl.
/plugin marketplace add vm0-ai/api0/plugin install api0@api0This skill inherits all available tools. When active, it can use any tool Claude has access to.
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.
Use this skill when you need to:
pdfnoodle_api_xxxxx)PDFORGE_API_KEYexport 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 .
All examples below assume you have PDFORGE_API_KEY set.
Base URL: https://api.pdfnoodle.com/v1
Generate a PDF using a pre-built template with dynamic data:
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 '"'"'{
"templateId": "your-template-id",
"data": {
"name": "John Doe",
"date": "2025-01-15",
"items": [
{"description": "Item 1", "price": 100},
{"description": "Item 2", "price": 200}
]
}
}'"'"' | jq .'
Response:
{
"signedUrl": "https://storage.googleapis.com/...",
"executionTime": 1234
}
The signedUrl is a temporary URL (expires in 1 hour) to download the generated PDF.
For batch processing, use the async endpoint with a webhook:
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 '"'"'{
"templateId": "your-template-id",
"webhook": "https://your-server.com/webhook",
"data": {
"name": "Jane Doe",
"amount": 500
}
}'"'"' | jq .'
Response:
{
"requestId": "abc123"
}
The webhook will receive the signedUrl when generation is complete.
Convert raw HTML directly to PDF without a template:
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 '"'"'{
"html": "<html><body><h1>Hello World</h1><p>This is a PDF generated from HTML.</p></body></html>"
}'"'"' | jq .'
Include CSS for styled PDFs:
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 '"'"'{
"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>"
}'"'"' | jq .'
Set convertToImage to true to get a PNG:
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 '"'"'{
"html": "<html><body><h1>Image Export</h1></body></html>",
"convertToImage": true
}'"'"' | jq .'
After getting the signedUrl, download the PDF:
SIGNED_URL="https://storage.googleapis.com/..."
curl -s -o output.pdf "${SIGNED_URL}"
| 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 |
| 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": {
"title": "Invoice #001",
"author": "Company Name",
"subject": "Monthly Invoice",
"keywords": ["invoice", "payment"]
}
}