PDFOven
Gere PDFs e imagens PNG a partir de HTML, Markdown, URLs ou templates Handlebars; chave de API gratuita com 100 renderizações por mês.
Servidor MCP hospedado
npx add-mcp 'https://pdfoven.com/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Documentação da API
URL base: https://pdfoven.com. Todas as solicitações usam JSON e uma chave de API do seu painel (cadastro gratuito). Toda a API está descrita na especificação OpenAPI 3.1.
Início rápido
- Crie uma conta gratuita; sua chave de API fica pronta imediatamente e defina-a como
PDFOVEN_KEY. - Execute isto. Ele usa o modelo de fatura integrado, então funciona sem configuração:
curl https://pdfoven.com/v1/pdf \
-H "Authorization: Bearer $PDFOVEN_KEY" \
-H "Content-Type: application/json" \
-d '{"template_id":"tpl_invoice","data":{"number":"INV-0001"}}' \
-o invoice.pdf
O corpo da resposta é o PDF (Content-Type: application/pdf), com os cabeçalhos X-Render-Ms (tempo de renderização) e X-Usage-Remaining (renderizações restantes neste mês). Erros retornam como JSON, descritos em Erros.
Autenticação
Envie sua chave como um token de portador: Authorization: Bearer po_live_…. O cabeçalho X-API-Key também funciona.
POST /v1/pdf
Renderiza um PDF. Forneça exatamente uma fonte:
html | Uma string HTML. Fragmentos são envolvidos em um documento com estilos base sensatos. |
|---|---|
markdown | Uma string Markdown (com sabor GitHub). |
url | Uma URL pública http(s) para capturar. |
template + data | Um modelo Handlebars inline e o JSON para preenchê-lo. |
template_id + data | Um modelo salvo no seu painel, ou um modelo integrado como tpl_invoice. Se data for omitido, seus dados de exemplo são usados. |
Campos opcionais:
css | CSS extra anexado ao documento. |
|---|---|
options.format | A4 (padrão), Letter, Legal, A3, A5, Tabloid |
options.landscape | Booleano, padrão false. |
options.margin | Margem uniforme como "0.5in", "12mm" ou "20px". |
options.print_background | Imprimir cores e imagens de fundo. Padrão true. |
options.header_template / footer_template | HTML para um cabeçalho/rodapé repetido. Use <span class="pageNumber"></span> e <span class="totalPages"></span>. Requer uma margem para ter espaço. |
options.scale | 0,1 – 2. |
wait_for_selector | Aguardar um seletor CSS antes de renderizar, para páginas que desenham gráficos com JavaScript. |
timeout_ms | 1.000 – 60.000. Padrão 30.000. |
response | "binary" (padrão) retorna o arquivo. "base64" retorna JSON { "data": "…", "content_type": "application/pdf", "bytes": 1234 }. |
filename | Define o nome do arquivo Content-Disposition. |
curl https://pdfoven.com/v1/pdf \
-H "Authorization: Bearer $PDFOVEN_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<h1>Hello, PDF</h1>","options":{"format":"Letter","margin":"0.5in"}}' \
--output hello.pdf
POST /v1/image
Aceita as mesmas fontes que /v1/pdf e retorna um PNG. Chame /v1/image?type=jpeg para um JPEG em vez disso. Opções de imagem em options: width, height, full_page, device_scale_factor (1–3) e quality (somente JPEG). Útil para imagens de compartilhamento social e certificados.
curl "https://pdfoven.com/v1/image" \
-H "Authorization: Bearer $PDFOVEN_KEY" \
-H "Content-Type: application/json" \
-d '{"template":"<div style=\"padding:60px;font:700 64px sans-serif\">{{title}}</div>","data":{"title":"Launch day"},"options":{"width":1200,"height":630}}' \
--output og.png
Modelos
Modelos são HTML com espaços reservados Handlebars, além de CSS opcional e opções de página padrão. Crie-os no painel com uma pré-visualização ao vivo, ou via API. Modelos Markdown também são suportados.
Modelos integrados
Toda conta pode renderizar estes sem salvar nada; eles não contam para o seu limite de modelos. Envie qualquer subconjunto de campos em data e o restante vem dos dados de exemplo, então {"template_id":"tpl_invoice","data":{"number":"INV-2041"}} funciona como está com uma nova chave.
tpl_invoice | Fatura limpa com itens de linha, impostos e totais. |
|---|---|
tpl_receipt | Recibo de pagamento compacto para e-commerce e SaaS. |
tpl_certificate | Certificado de conclusão em paisagem. |
tpl_report | Relatório legível de várias páginas escrito em Markdown. |
tpl_paystub | Demonstrativo de rendimentos com horas, tarifas, deduções e pagamento líquido. |
tpl_packing_slip | Nota de remessa de pedido com endereço de entrega, SKUs e quantidades, sem preços. |
Para personalizar um, abra-o no editor de modelos como um modelo inicial e salve sua própria cópia.
Ajudantes integrados:
{{formatCurrency amount "EUR"}} | Formata dinheiro. Padrão USD. |
|---|---|
{{formatNumber value 2}} | Decimais fixos. |
{{formatDate issued_at "medium"}} | curto / médio / longo / completo. |
{{sum items "amount"}} | Soma um campo em um array. |
{{lineTotal items "qty" "price"}} | Soma de qtd × preço em um array. |
{{multiply a b}}, {{add a b}} | Aritmética. |
{{#if (eq status "paid")}} | Verificações de igualdade. |
{{upper text}} | Maiúsculas. |
GET /v1/templates
Lista seus modelos.
POST /v1/templates
{
"name": "Invoice",
"engine": "handlebars",
"content": "<h1>Invoice {{number}}</h1>",
"css": "h1 { color: #c8155f }",
"sample_data": { "number": "INV-1" },
"page_options": { "format": "Letter", "margin": "0.5in" }
}
GET /v1/usage
Retorna seu plano, limite e renderizações usadas neste mês calendário (UTC).
{ "plan": "starter", "period": "2026-10", "used": 412, "limit": 2000 }
Erros
Erros são JSON: { "error": { "code": "quota_exceeded", "message": "…" } }
| 400 | invalid_request — o corpo falhou na validação. |
|---|---|
| 401 | unauthorized — chave de API ausente ou inválida. |
| 404 | template_not_found |
| 422 | template_error ou render_failed (URL bloqueada, tempo limite, erro HTTP). |
| 429 | quota_exceeded — limite mensal atingido. Renderizações com falha não contam. |
Servidor MCP para agentes de IA
PDFOven fala o Model Context Protocol sobre HTTP Streamable em https://pdfoven.com/mcp. Os agentes obtêm render_pdf e render_image, além de list_templates, get_template, create_template, update_template e delete_template para gerenciar modelos salvos. Arquivos renderizados retornam como recursos incorporados.
Claude Code:
claude mcp add --transport http pdfoven https://pdfoven.com/mcp \
--header "Authorization: Bearer $PDFOVEN_KEY"
Cursor / outros clientes (mcp.json):
{
"mcpServers": {
"pdfoven": {
"url": "https://pdfoven.com/mcp",
"headers": { "Authorization": "Bearer po_live_..." }
}
}
}
Limites
- HTML até 5 MB por solicitação; tempo limite de renderização até 60 segundos.
- A renderização de URL é limitada a endereços públicos.
- Arquivos renderizados não são armazenados.
Suporte
Perguntas ou uma renderização que parece errada? Envie um e-mail para support@pdfoven.com com a solicitação que você enviou e o código de erro que recebeu.