API de cualquier archivo a PDF#

El endpoint POST /v1/convert/anything-to-pdf convierte casi cualquier archivo que subas — Word, Excel, PowerPoint, OpenDocument, Apple Pages y Numbers, HTML, Markdown, texto plano, EPUB, imágenes y SVG — en un PDF. Detecta automáticamente el formato del archivo que envías, lo redirige al motor de renderizado adecuado y devuelve un único PDF. Un solo endpoint reemplaza toda la pila de PDF específica por formato: subes un archivo y recibes un PDF, sea cual sea el tipo de origen.

Es el superconjunto de una sola llamada de los endpoints de PDF específicos por formato (html-to-pdf, doc-to-pdf, excel-to-pdf y los demás): usa esos cuando ya conoces el tipo de entrada y quieres un control detallado de la página, y usa este cuando la entrada podría ser cualquier cosa. Este endpoint funciona solo con archivos; para renderizar a PDF una página web en vivo, usa url-to-pdf. Para el equivalente en Markdown que convierte cualquier archivo en Markdown limpio, consulta anything-to-markdown.


Endpoint#

POST /v1/convert/anything-to-pdf

Content-Type: multipart/form-data

Formato de salida: PDF (.pdf, application/pdf). El tipo de entrada se detecta automáticamente a partir de la extensión del nombre del archivo subido y de sus magic bytes; no especificas un formato de entrada.


Formatos de entrada admitidos#

El tipo de entrada se detecta a partir de la extensión del archivo (validada contra los magic bytes del archivo). Estos son todos los formatos que acepta el endpoint:

Categoría Formatos Extensiones Notas
Word DOCX, DOC .docx, .doc Renderizado con LibreOffice, conservando estilos, tablas y diseño.
Excel XLSX, XLS .xlsx, .xls Hojas de cálculo renderizadas a un PDF paginado mediante LibreOffice.
PowerPoint PPTX, PPT .pptx, .ppt Una página de PDF por diapositiva, mediante LibreOffice.
OpenDocument ODT, ODS, ODP, OTS .odt, .ods, .odp, .ots Documentos de texto, hoja de cálculo, presentación y plantilla de hoja de cálculo, mediante LibreOffice.
Apple iWork Pages, Numbers .pages, .numbers Documentos de Apple Pages y Numbers, mediante LibreOffice.
Texto enriquecido / datos RTF, CSV .rtf, .csv Documentos RTF y tablas CSV renderizados mediante LibreOffice.
Web / marcado HTML, XHTML .html, .htm, .xhtml Renderizado con WeasyPrint, respetando el propio CSS del documento.
Markdown Markdown .md, .markdown, .mdown, .mkd Renderizado a un PDF con estilos, con encabezados, tablas y bloques de código.
Texto plano Text .txt, .text Renderizado con una disposición monoespaciada que conserva los espacios en blanco.
Libros electrónicos EPUB .epub Capítulos convertidos en orden de lectura (spine) a un PDF de texto.
Imágenes PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif Cada imagen se convierte en un PDF de una sola página; la transparencia se aplana sobre fondo blanco.
Vectorial SVG .svg Renderizado como vector (no rasterizado) con CairoSVG.
PDF PDF .pdf Aceptado y devuelto tal cual; útil para la normalización a escala de grises (ver pdf_options).
Nota: A diferencia de los endpoints de PDF específicos por formato, aquí no se aplica la geometría de página (tamaño de página personalizado, márgenes, orientación, encabezados y pies de página), porque el formato de entrada se detecta automáticamente y cada tipo se renderiza con un motor distinto. En este endpoint solo se respeta grayscale. Para un control total de la página, envía HTML o Markdown a html-to-pdf o markdown-to-pdf. Para convertir una URL en vivo a PDF, usa url-to-pdf.

Autenticación#

Este endpoint admite autenticación tanto con clave privada como con clave pública.

Clave privada#

Incluye tu clave secreta en la cabecera X-API-Key. Úsala para llamadas de servidor a servidor donde la clave nunca se expone al cliente.

X-API-Key: sk_live_your_private_key

Clave pública con JWT#

Para uso del lado del cliente, primero genera un token JWT con tu clave pública y luego pásalo como token Bearer.

Paso 1 -- Obtén un token:

POST /v1/auth/token
X-API-Key: pk_live_your_public_key

Paso 2 -- Usa el token:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

El flujo completo, incluidos el bloqueo por dominio y la renovación del token, está en la guía de autenticación. Cada clave de API lleva una lista de endpoints permitidos; si /v1/convert/anything-to-pdf no está en la lista de la clave, la petición se rechaza con 403.


Parámetros de la petición#

Envía el archivo como multipart/form-data. El documento va en el campo file; el resto son campos de formulario opcionales.

Parámetro Tipo Obligatorio Predeterminado Descripción
file file -- El archivo de documento, imagen o marcado que se va a convertir. Su extensión debe ser uno de los formatos de entrada admitidos anteriores.
output_filename string No Nombre de entrada Nombre personalizado para el archivo de salida. La extensión .pdf se añade automáticamente.
direct_download boolean No true Se acepta por paridad de forma con las peticiones de los demás endpoints de conversión.
job_id string No -- ID de trabajo proporcionado por el cliente para la recuperación tras un timeout. Cuando una conversión síncrona supera los límites de timeout del proxy inverso, consulta GET /v1/convert/status/{job_id} para obtener el resultado.
pdf_options string No null Cadena JSON con opciones de PDF. En este endpoint solo se respeta grayscale; ver más abajo.

Opciones de PDF#

Pásalas como una cadena JSON en el campo de formulario pdf_options. Como el formato de entrada se detecta automáticamente y cada formato se renderiza con un motor distinto, aquí solo se aplica grayscale de forma uniforme.

Parámetro Tipo Predeterminado Descripción
grayscale boolean false Convierte el PDF de salida a escala de grises mediante posprocesamiento con Ghostscript. Se aplica a todos los tipos de entrada, incluida una subida que ya sea PDF.

Para un tamaño de página personalizado, márgenes, orientación, encabezados o pies de página, convierte HTML o Markdown a través de los endpoints específicos html-to-pdf o markdown-to-pdf, que aceptan el esquema completo de pdf_options.


Respuesta#

La conversión se ejecuta en el proceso y el archivo .pdf resultante se almacena; después, el endpoint devuelve un cuerpo JSON con una URL de descarga prefirmada:

{
    "presigned_url": "https://spaces.example.com/...signed...",
    "object_key": "env/files/{project_id}/anything-to-pdf/report_20260714_101530123.pdf",
    "filename": "report_20260714_101530123.pdf",
    "file_size": 51240,
    "conversion_time_seconds": 2.1,
    "job_id": null
}

Los mismos valores se reflejan en las cabeceras de respuesta (X-Object-Key, X-File-Size, X-Conversion-Time, X-Filename) para que puedas leerlos sin analizar el cuerpo. Descarga el PDF desde presigned_url; el enlace tiene una vida corta.


Cómo se convierte cada formato#

Cada formato se normaliza a un PDF, de modo que obtienes una salida coherente sin importar el tipo de origen.

  • Word / Excel / PowerPoint — Renderizados con LibreOffice en modo headless, conservando estilos, tablas y diseño; las presentaciones producen una página por diapositiva. Los formatos binarios heredados (.doc, .xls, .ppt) los gestiona el mismo motor.
  • OpenDocument, Apple Pages / Numbers, RTF, CSV — También renderizados con LibreOffice, de modo que los documentos ODF, las exportaciones de iWork, el texto enriquecido y las tablas CSV se paginan de forma limpia.
  • HTML / XHTML — Renderizados con WeasyPrint, que respeta el propio CSS del documento. Los recursos externos referenciados por URL pueden no resolverse; incrusta tu CSS en línea y codifica las imágenes en base64 para obtener mejores resultados.
  • Markdown — Convertido a HTML (encabezados, tablas al estilo GitHub-Flavored, bloques de código) y renderizado con WeasyPrint en un PDF limpio y con estilos.
  • Texto plano — Renderizado con una disposición monoespaciada que conserva los espacios en blanco y ajusta las líneas largas, de modo que los registros y el código siguen siendo legibles.
  • EPUB — Los documentos de contenido se leen en orden de spine (lectura) y se renderizan capítulo a capítulo en un PDF de texto; el documento de navegación se omite.
  • Imágenes (PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC) — Cada imagen se convierte en un PDF de una sola página mediante Pillow. La transparencia se aplana sobre un fondo blanco y solo se usa el primer fotograma de una imagen de varios fotogramas (GIF animado, TIFF de varias páginas).
  • SVG — Renderizado como gráficos vectoriales reales con CairoSVG, de modo que el resultado se mantiene nítido a cualquier nivel de zoom.
  • PDF — Un PDF subido se valida y se devuelve sin cambios, lo que convierte a este endpoint en una forma cómoda de normalizar a escala de grises un PDF existente.

Formato de salida#

El resultado es un PDF estándar (application/pdf):

  • Los documentos conservan su paginación, encabezados, tablas y estilos del motor de renderizado de origen.
  • Las imágenes producen una única página del tamaño de la imagen; SVG se mantiene vectorial.
  • Escala de grises — cuando pdf_options.grayscale es true, el PDF final se desatura mediante una pasada de posprocesamiento con Ghostscript.

Si necesitas Markdown limpio en lugar de un PDF — por ejemplo, para alimentar un pipeline de LLM o RAG — envía el mismo archivo a anything-to-markdown o el endpoint de ingest.


Formatos admitidos por endpoint#

Los endpoints de subida de archivos comparten la misma detección automática de formato, pero apuntan a salidas distintas. Este endpoint (anything-to-pdf) acepta el conjunto más amplio: los 36 formatos siguientes. anything-to-markdown y /v2/ingest aceptan entre sí los mismos 22 formatos de documento (las imágenes, SVG y los formatos de Apple/OTS son solo para PDF), y /v2/ingest además acepta fuentes web — una lista de URL, un sitemap o un rastreo — no solo archivos.

Categoría Extensiones anything-to-pdf anything-to-markdown /v2/ingest
PDF .pdf
Word .docx, .doc
Excel .xlsx, .xls
PowerPoint .pptx, .ppt
CSV .csv
Texto enriquecido .rtf
OpenDocument .odt, .ods, .odp
Plantilla ODF .ots
Apple iWork .pages, .numbers
Web / marcado .html, .htm, .xhtml
Markdown / texto .md, .markdown, .mdown, .mkd, .txt, .text
Libros electrónicos .epub
Imágenes .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif
Vectorial .svg

Un ✓ significa que el endpoint acepta ese formato como subida de archivo; un — significa que no. Las imágenes y SVG se convierten a PDF aquí, pero los endpoints con salida en Markdown los rechazan (el OCR de imágenes es un pipeline aparte). Los límites de tamaño por archivo dependen del plan (Free: 5 MB) en los tres endpoints.


Ejemplos de código#

curl (clave privada)#

curl -X POST https://api.enconvert.com/v1/convert/anything-to-pdf \
  -H "X-API-Key: sk_live_your_private_key" \
  -F "[email protected]"

Python (clave privada)#

import requests

with open("quarterly-report.docx", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/anything-to-pdf",
        headers={"X-API-Key": "sk_live_your_private_key"},
        files={"file": ("quarterly-report.docx", f)},
    )

response.raise_for_status()
result = response.json()

# Download the PDF from the pre-signed URL.
pdf = requests.get(result["presigned_url"]).content
with open("quarterly-report.pdf", "wb") as out:
    out.write(pdf)

Node.js (clave privada)#

import { readFile, writeFile } from "node:fs/promises";

const form = new FormData();
form.append(
    "file",
    new Blob([await readFile("quarterly-report.docx")]),
    "quarterly-report.docx"
);

const response = await fetch(
    "https://api.enconvert.com/v1/convert/anything-to-pdf",
    { method: "POST", headers: { "X-API-Key": "sk_live_your_private_key" }, body: form }
);

const result = await response.json();
const pdf = await fetch(result.presigned_url).then((r) => r.arrayBuffer());
await writeFile("quarterly-report.pdf", Buffer.from(pdf));

PHP (clave privada)#

$ch = curl_init("https://api.enconvert.com/v1/convert/anything-to-pdf");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_live_your_private_key"],
    CURLOPT_POSTFIELDS => [
        "file" => new CURLFile("quarterly-report.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "quarterly-report.docx"),
    ],
]);

$data = json_decode(curl_exec($ch), true);
curl_close($ch);

echo $data["presigned_url"];

Respuestas de error#

Estado Condición
400 Bad Request Tipo de archivo no admitido, un archivo vacío o un documento corrupto/ilegible (p. ej., una imagen no válida o un EPUB con formato incorrecto).
400 Bad Request Los bytes del archivo no coinciden con su extensión declarada (discordancia de magic bytes).
400 Bad Request JSON de pdf_options no válido.
401 Unauthorized Clave de API o token JWT ausente o no válido.
402 Payment Required Se alcanzó el límite mensual de conversiones o el límite de almacenamiento.
403 Forbidden /v1/convert/anything-to-pdf no está entre los endpoints permitidos de la clave de API.
413 Payload Too Large La subida supera el límite de tamaño por archivo de tu plan.
500 Internal Server Error La conversión falló inesperadamente.

La referencia completa de códigos de estado está en la guía de códigos de error.


Límites#

Límite Valor
Tamaño máximo de subida Según el plan (Free: 5 MB)
Conversiones mensuales Según el plan (Free: 100)
Retención de archivos Según el plan (Free: 1 hora)
Opciones de geometría de página No se aplican en este endpoint (solo grayscale)
Formatos de entrada admitidos Ver la tabla de formatos de entrada admitidos

Preguntas frecuentes#

¿Cómo convierto cualquier archivo a PDF con una API?#

Envía una petición POST a /v1/convert/anything-to-pdf como multipart/form-data con tu archivo en el campo file y tu clave en la cabecera X-API-Key. El endpoint detecta automáticamente el formato, lo renderiza a PDF y devuelve JSON con un presigned_url al .pdf terminado. No necesitas indicarle el tipo de entrada: lo deciden la extensión y los magic bytes.

¿Qué formatos de archivo puedo convertir a PDF?#

Word (.docx, .doc), Excel (.xlsx, .xls), PowerPoint (.pptx, .ppt), OpenDocument (.odt, .ods, .odp, .ots), Apple Pages y Numbers, RTF, CSV, HTML/XHTML, Markdown, texto plano, EPUB, imágenes (.png, .jpg, .jpeg, .gif, .bmp, .tiff, .webp, .heic) y SVG. Un PDF existente se acepta y se devuelve tal cual. La lista completa con notas por formato está en la tabla de formatos de entrada admitidos.

¿Puedo convertir Word, Excel o PowerPoint a PDF a través de la API?#

Sí. Los documentos de Office — modernos (.docx, .xlsx, .pptx) y heredados (.doc, .xls, .ppt) — se renderizan con LibreOffice, conservando estilos, tablas y diseño, con una página por diapositiva en las presentaciones. Sube el archivo y recibes el PDF de vuelta.

¿Cómo convierto una imagen como PNG, JPEG o HEIC a PDF?#

Súbela al mismo endpoint. Cada imagen se convierte en un PDF de una sola página, con la transparencia aplanada sobre un fondo blanco; también se admiten las fotos .heic/.heif del iPhone y los vectores .svg. Para una imagen de varios fotogramas (GIF animado o TIFF de varias páginas), se usa el primer fotograma.

¿Puedo definir un tamaño de página, márgenes o encabezados personalizados en el PDF?#

En este endpoint no: solo se respeta grayscale, porque el formato de entrada se detecta automáticamente y cada tipo usa un motor de renderizado distinto. Para un control total de la página (tamaño de página, márgenes, orientación, encabezados, pies de página), envía HTML o Markdown a los endpoints html-to-pdf o markdown-to-pdf, que aceptan el esquema completo de pdf_options.

¿En qué se diferencia esto de los endpoints doc-to-pdf o html-to-pdf?#

Los endpoints específicos por formato aceptan cada uno un solo tipo de entrada y exponen todas las opciones de geometría de página; anything-to-pdf los acepta todos tras una única llamada y detecta automáticamente el formato, lo que resulta ideal cuando la entrada podría ser cualquier cosa. Usa un endpoint específico cuando conoces el tipo y quieres control de página; usa este cuando quieres una única vía de subida para muchos formatos.