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.
Criar uma conta
Registe-se gratuitamente para obter acesso ao dashboard.
Gerar uma Chave API
No dashboard, vá para "API Keys" e crie uma nova chave.
Fazer o seu primeiro pedido
Use sua Chave API para autenticar pedidos para o endpoint /v1/generate.
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.
{
"apiKey": "wpdf_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"url": "https://example.com"
}
Endpoint /generate
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") |
{
"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 janelaX-RateLimit-Remaining: Pedidos restantesX-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