🎯

pdforge

🎯Skill

from vm0-ai/vm0-skills

VibeIndex|
What it does

Generates PDFs from templates or HTML using PDForge/PDF Noodle API via direct curl calls with dynamic data and template support.

πŸ“¦

Part of

vm0-ai/vm0-skills(134 items)

pdforge

Installation

Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add vm0-ai/vm0-skills
Install PluginInstall plugin from marketplace
/plugin install notion@vm0-skills
Install PluginInstall plugin from marketplace
/plugin install slack-webhook@vm0-skills
git cloneClone repository
git clone https://github.com/vm0-ai/vm0-skills.git
πŸ“– Extracted from docs: vm0-ai/vm0-skills
12Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

PDForge (PDF Noodle) API for generating PDFs from templates or HTML via curl.

Overview

# 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

  1. Sign up at [PDF Noodle](https://pdfnoodle.com/) (formerly PDForge)
  2. Go to the API Keys menu in the dashboard
  3. Copy your API key (format: pdfnoodle_api_xxxxx)
  4. Store it in the environment variable PDFORGE_API_KEY

```bash

export PDFORGE_API_KEY="pdfnoodle_api_your-key-here"

```

---

> Important: When using $VAR in a command that pipes to another command, wrap the command containing $VAR in bash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.

> ```bash

> bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq '.field'

> ```

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:

```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

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'

```

Response:

```json

{

"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:

```json

{

"templateId": "your-template-id",

"webhook": "https://your-server.com/webhook",

"data": {

"name": "Jane Doe",

"amount": 500

}

}

```

Then run:

```bash

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'

```

Response:

```json

{

"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:

```json

{

"html": "

Hello World

This is a PDF generated from HTML.

"

}

```

Then run:

```bash

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'

```

---

4. Convert HTML to PDF with Styling

Include CSS for styled PDFs.

Write to /tmp/pdforge_request.json:

```json

{

"html": "

Invoice #001

Amount: $500

"

}

```

Then run:

```bash

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'

```

---

5. Generate PNG Instead of PDF

Set convertToImage to true to get a PNG.

Write to /tmp/pdforge_request.json:

```json

{

"html": "

Image Export

",

"convertToImage": true

}

```

Then run:

```bash

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'

```

---

6. Download Generated PDF

After getting the signedUrl, download the PDF:

Replace with the actual signed URL from the previous response:

```bash

curl -s -o output.pdf "https://storage.googleapis.com/"

```

---

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

```json

{

"metadata": {

"title": "Invoice #001",

"author": "Company Name",

"subject": "Monthly Invoice",

"keywords": ["invoice", "payment"]

}

}

```

---

Guidelines

  1. Use templates for reusable documents: Create templates in the dashboard for invoices, reports, etc.
  2. Use HTML endpoint for one-off documents: When you don't need a reusable template
  3. Use async for batch processing: Async endpoint is better for generating many PDFs
  4. Download promptly: Signed URLs expire in 1 hour
  5. Include CSS inline: For HTML to PDF, include all styles in the HTML