Agent skill
pdforge
PDForge API for PDF generation. Use when user mentions "PDForge", "generate PDF", "PDF template", or document generation.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/pdforge
SKILL.md
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"
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:
curl -s -X POST "https://api.pdfnoodle.com/v1/pdf/sync" --header "Authorization: Bearer $(printenv PDFORGE_API_KEY)" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json
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:
curl -s -X POST "https://api.pdfnoodle.com/v1/pdf/async" --header "Authorization: Bearer $(printenv PDFORGE_API_KEY)" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json
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:
curl -s -X POST "https://api.pdfnoodle.com/v1/html-to-pdf/sync" --header "Authorization: Bearer $(printenv PDFORGE_API_KEY)" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json
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:
curl -s -X POST "https://api.pdfnoodle.com/v1/html-to-pdf/sync" --header "Authorization: Bearer $(printenv PDFORGE_API_KEY)" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json
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:
curl -s -X POST "https://api.pdfnoodle.com/v1/html-to-pdf/sync" --header "Authorization: Bearer $(printenv PDFORGE_API_KEY)" --header "Content-Type: application/json" -d @/tmp/pdforge_request.json
6. Download Generated PDF
After getting the signedUrl, download the PDF:
Replace <your-signed-url> with the actual signed URL from the previous response:
curl -s -o output.pdf "https://storage.googleapis.com/<your-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
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?