Documentação da API

Tudo o que você precisa para integrar o WebPDF.app em seus projetos.

Primeiros Passos

O WebPDF.app oferece uma API REST simples para converter HTML em PDF. Siga estes passos para começar em menos de 5 minutos.

1

Criar uma conta

Registe-se gratuitamente para obter acesso ao dashboard.

2

Gerar uma Chave API

No dashboard, vá para "API Keys" e crie uma nova chave.

3

Fazer o seu primeiro pedido

Use sua Chave API para autenticar pedidos para o endpoint /v1/generate.

Início Rápido - cURL
curl -X POST https://api.webpdf.app/v1/generate \
  -H "Content-Type: application/json" \
  -d '{"apiKey": "YOUR_API_KEY", "url": "https://example.com"}' \
  --output document.pdf

Autenticação

Todos os pedidos à API devem incluir sua Chave API no corpo do pedido JSON.

Autenticação por Chave API

Inclua o campo apiKey no corpo do seu pedido JSON.

Cabeçalhos do Pedido
{
  "apiKey": "wpdf_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "url": "https://example.com"
}

Endpoint /generate

POST https://api.webpdf.app/v1/generate

Converte uma página web ou conteúdo HTML em um documento PDF.

Corpo do Pedido (JSON)

Parâmetro Tipo Descrição
apiKey string Chave API para autenticação
url string URL da página web a converter. Obrigatório se html não for fornecido.
html string Conteúdo HTML direto a converter. Obrigatório se url não for fornecido.
format string Formato da página: "Letter", "Legal", "A4" etc. (padrão: "A4")
landscape boolean Orientação da página: true para paisagem (padrão: false)
marginTop inteiro Margem superior em pixels (padrão: 0)
marginRight inteiro Margem direita em pixels (padrão: 0)
marginBottom inteiro Margem inferior em pixels (padrão: 0)
marginLeft inteiro Margem esquerda em pixels (padrão: 0)
width inteiro Largura personalizada da página em pixels
height inteiro Altura personalizada da página em pixels
media string Tipo de Mídia CSS: "screen" ou "print" (padrão: "screen")
Exemplo de Pedido
{
  "apiKey": "your-api-key-here",
  "url": "https://example.com",
  "format": "A4",
  "landscape": false,
  "marginTop": 10,
  "marginRight": 10,
  "marginBottom": 10,
  "marginLeft": 10,
  "media": "print"
}

Parâmetros Disponíveis

Os seguintes parâmetros podem ser enviados no corpo JSON do seu pedido POST.

Parâmetro docs.options.type Padrão docs.options.description
format string "A4" Formato da página (Letter, Legal, Tabloid, Ledger, A0-A6)
width string - Largura personalizada em pixels
height string - Altura personalizada em pixels
landscape boolean false Orientação: true para paisagem
margin object 0 Margens (marginTop, marginRight, marginBottom, marginLeft)
printBackground boolean true Tipo de mídia CSS: "screen" ou "print"
scale inteiro 1 Nota: Pelo menos url ou html deve ser fornecido. Se ambos forem fornecidos, html é usado.
displayHeaderFooter boolean false Mostrar cabeçalho e rodapé
headerTemplate string - Modelo HTML para o cabeçalho
footerTemplate string - Modelo HTML para o rodapé
pageRanges string - Intervalos de páginas (ex: "1-5, 8")
waitForSelector string - Seletor CSS para esperar antes de renderizar
waitForTimeout inteiro 0 Milissegundos adicionais de espera

Exemplos de Código

Copie e cole estes exemplos para começar rapidamente em sua linguagem preferida.

// Node.js / JavaScript
const generatePdf = async () => {
  const response = await fetch('https://api.webpdf.app/v1/generate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      apiKey: process.env.WEBPDF_API_KEY,
      url: 'https://example.com',
      format: 'A4',
      landscape: false
    })
  });

  if (!response.ok) {
    const errorText = await response.text();
    throw new Error(`HTTP ${response.status}: ${errorText}`);
  }

  const pdfBuffer = await response.arrayBuffer();
  return Buffer.from(pdfBuffer);
};

// Usage
const pdf = await generatePdf();
fs.writeFileSync('output.pdf', pdf);
# Python
import requests
import os

def generate_pdf(url_to_convert):
    api_url = "https://api.webpdf.app/v1/generate"
    payload = {
        "apiKey": os.environ.get('WEBPDF_API_KEY'),
        "url": url_to_convert,
        "format": "A4",
        "landscape": False
    }
    headers = {"Content-Type": "application/json"}
    
    response = requests.post(api_url, json=payload, headers=headers)
    
    if response.status_code == 200:
        return response.content
    else:
        print(f"Errore: {response.status_code} - {response.text}")
        return None

# Usage
pdf_bytes = generate_pdf("https://example.com")
if pdf_bytes:
    with open("output.pdf", "wb") as f:
        f.write(pdf_bytes)
// PHP
<?php

function generatePdf($url) {
    $apiKey = getenv('WEBPDF_API_KEY');
    
    $data = [
        'apiKey' => $apiKey,
        'url' => $url,
        'format' => 'A4',
        'landscape' => false
    ];
    
    $ch = curl_init('https://api.webpdf.app/v1/generate');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json'
        ]
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return $response;
}

// Usage
$pdf = generatePdf('https://example.com');
file_put_contents('output.pdf', $pdf);
// Java (with HttpClient)
import java.net.http.*;
import java.net.URI;

public class WebPdfClient {
    private static final String API_URL = "https://api.webpdf.app/v1/generate";
    private final String apiKey;
    
    public WebPdfClient(String apiKey) {
        this.apiKey = apiKey;
    }
    
    public byte[] generatePdf(String url) throws Exception {
        String json = String.format("{\"apiKey\":\"%s\",\"url\":\"%s\",\"format\":\"A4\"}", apiKey, url);
        
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(API_URL))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
        
        HttpResponse response = client.send(
            request, HttpResponse.BodyHandlers.ofByteArray()
        );
        
        return response.body();
    }
}
// C# (.NET)
using System.Net.Http;
using System.Text;
using System.Text.Json;

public class WebPdfClient
{
    private readonly HttpClient _client;
    private readonly string _apiKey;
    private const string ApiUrl = "https://api.webpdf.app/v1/generate";

    public WebPdfClient(string apiKey)
    {
        _client = new HttpClient();
        _apiKey = apiKey;
    }

    public async Task<byte[]> GeneratePdfAsync(string url)
    {
        var payload = new {
            apiKey = _apiKey,
            url = url,
            format = "A4"
        };

        var json = JsonSerializer.Serialize(payload);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await _client.PostAsync(ApiUrl, content);
        response.EnsureSuccessStatusCode();

        return await response.Content.ReadAsByteArrayAsync();
    }
}
# cURL con URL
curl -X POST https://api.webpdf.app/v1/generate \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "test-key",
    "url": "https://example.com",
    "format": "A4",
    "landscape": false
  }' \
  --output document.pdf

# cURL con HTML diretto
curl -X POST https://api.webpdf.app/v1/generate \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "test-key",
    "html": "

Test

PDF generato da HTML.

", "format": "A4" }'
\ --output document.pdf

Tratamento de Erros

A API retorna códigos HTTP padrão e um corpo JSON com detalhes do erro.

Código Significado Ação
200 Sucesso PDF gerado com sucesso
400 Bad Request Verifique os parâmetros do pedido
401 Não Autorizado Chave API ausente ou inválida
403 Proibido Créditos insuficientes ou conta suspensa
429 Too Many Requests Limite de taxa excedido, tente novamente mais tarde
500 Erro de Servidor Erro interno, contacte-nos se persistir

Limites de Taxa

Para garantir a estabilidade do serviço, aplicamos limites de pedidos por Chave API.

Limites do plano

  • Grátis 60 req/min
  • Startup 300 req/min
  • Business 600 req/min
  • Enterprise Custom

Cabeçalhos de resposta

  • X-RateLimit-Limit: Limite de pedidos por janela
  • X-RateLimit-Remaining: Pedidos restantes
  • X-RateLimit-Reset: Timestamp de reset do limite

Changelog

v3.0.0 - Janeiro 2024

Atualização de Funcionalidades

  • Adicionado suporte para parâmetro html
  • Parâmetro url torna-se condicional
  • Validação melhorada
  • Retrocompatibilidade mantida

v1.1.0 - Junho 2023

Lançamento Inicial

  • Endpoint inicial /v1/generate
  • Conversão de HTML para PDF com iText 7
  • Busca automática de conteúdo web
  • Limpeza de HTML com Jsoup
  • Suporte para PDFs existentes

v1.0.0 - Jun 2023