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

  1. Crie uma conta gratuita; sua chave de API fica pronta imediatamente e defina-a como PDFOVEN_KEY.
  2. 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:

htmlUma string HTML. Fragmentos são envolvidos em um documento com estilos base sensatos.
markdownUma string Markdown (com sabor GitHub).
urlUma URL pública http(s) para capturar.
template + dataUm modelo Handlebars inline e o JSON para preenchê-lo.
template_id + dataUm 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:

cssCSS extra anexado ao documento.
options.formatA4 (padrão), Letter, Legal, A3, A5, Tabloid
options.landscapeBooleano, padrão false.
options.marginMargem uniforme como "0.5in", "12mm" ou "20px".
options.print_backgroundImprimir cores e imagens de fundo. Padrão true.
options.header_template / footer_templateHTML para um cabeçalho/rodapé repetido. Use <span class="pageNumber"></span> e <span class="totalPages"></span>. Requer uma margem para ter espaço.
options.scale0,1 – 2.
wait_for_selectorAguardar um seletor CSS antes de renderizar, para páginas que desenham gráficos com JavaScript.
timeout_ms1.000 – 60.000. Padrão 30.000.
response"binary" (padrão) retorna o arquivo. "base64" retorna JSON { "data": "…", "content_type": "application/pdf", "bytes": 1234 }.
filenameDefine 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_invoiceFatura limpa com itens de linha, impostos e totais.
tpl_receiptRecibo de pagamento compacto para e-commerce e SaaS.
tpl_certificateCertificado de conclusão em paisagem.
tpl_reportRelatório legível de várias páginas escrito em Markdown.
tpl_paystubDemonstrativo de rendimentos com horas, tarifas, deduções e pagamento líquido.
tpl_packing_slipNota 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": "…" } }

400invalid_request — o corpo falhou na validação.
401unauthorized — chave de API ausente ou inválida.
404template_not_found
422template_error ou render_failed (URL bloqueada, tempo limite, erro HTTP).
429quota_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.