Markdown a PDF
Le entrega Markdown plano y le devuelve un PDF bien maquetado — con títulos, listas, tablas, bloques de código y citas renderizados con paginación real, no una captura del diálogo de impresión del navegador. Existe para el momento en que su contenido vive en Markdown pero alguien más adelante necesita un documento.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué Markdown todavía necesita una salida a PDF
Markdown ganó terreno porque es rápido de escribir y se compara limpio en git, pero casi nadie fuera de ingeniería quiere leerlo en crudo. Notas de versión, exportaciones de README, wikis internas, informes generados por IA, artículos de base de conocimiento — todo eso termina necesitando llegar a una bandeja de entrada o a una carpeta de cumplimiento como un documento con márgenes, numeración de página y una maquetación estable. Este endpoint es esa salida: el mismo Markdown que su equipo ya escribe se convierte en un PDF que un cliente, el área de finanzas o un auditor puede abrir sin preguntar qué es un archivo .md.
Qué le pasa realmente a su archivo
El servicio analiza el Markdown y construye un árbol de documento estructurado, y luego lo maqueta con reglas tipográficas que la función de imprimir de un navegador ignora: interlineado razonable, control de líneas viudas y huérfanas, saltos de página que respetan los títulos, y tablas que no quedan cortadas a la mitad en el borde de una página. Los bloques de código mantienen el formato monoespaciado sin desbordar el margen; las listas anidadas conservan su sangría. El resultado es un único PDF autocontenido, no una carpeta de archivos sueltos.
Qué envía y qué recibe
Envía el Markdown de origen (o un enlace a él) por POST a /pdf/from-markdown. Como el renderizado y la paginación toman tiempo real de cómputo en documentos largos, la llamada es asíncrona: recibe un task_id de inmediato y el PDF terminado llega a su webhook firmado, o lo consulta mediante un enlace firmado válido por 24 horas. Nada se queda esperando sobre una conexión HTTP abierta.
Dónde encaja en un flujo automatizado
Al ser una sola llamada REST, se integra en lo que sea que genere el Markdown en primer lugar: un job de integración continua que arma notas de versión en cada etiqueta, un CMS que exporta artículos como PDF de marca, o una herramienta interna que convierte el registro Markdown de un ticket de soporte en un adjunto formal. Nunca toca una librería de renderizado, un archivo de fuentes ni un navegador sin interfaz.
Un cobro que corresponde al trabajo
El precio es una tarifa base pequeña por solicitud más un cargo por página, publicado y predecible, así un changelog de una página y un manual de cuarenta cuestan cantidades proporcionalmente distintas — nunca una estimación plana. Una tarea que falla tras tres reintentos nunca se cobra, y los resultados se eliminan al vencer el período de retención sin usarse jamás para entrenar nada.
Qué puede hacer con ella
Notas de versión automatizadas
Un pipeline de integración continua escribe changelogs en Markdown en cada despliegue; este endpoint convierte cada uno en un PDF adjunto al correo de lanzamiento automáticamente.
Informes listos para el cliente desde salidas de IA
Una herramienta interna genera análisis en Markdown; convertirlo a PDF lo vuelve algo que de verdad puede enviarle a un cliente sin reformatear nada.
Archivo de documentación
Una wiki o un README necesita una instantánea inmutable en el tiempo por temas de cumplimiento — exporta el Markdown de origen directo a PDF y lo archiva.
Registros de tickets de soporte
Un sistema de tickets guarda conversaciones como Markdown; convertir el hilo a PDF le da un adjunto limpio para el expediente del caso.
Preguntas frecuentes
¿La API Markdown a PDF es gratis?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Admite Markdown con extensiones estilo GitHub?
Sí, incluyendo tablas, bloques de código, listas de tareas y citas; todo se renderiza como elementos reales del PDF, no como texto plano volcado.
¿Puedo controlar el estilo visual?
El renderizador aplica un estilo tipográfico limpio y legible pensado para documentos, tablas y código, así que no necesita ajustar CSS a mano para obtener algo presentable.
¿Cómo recibo el archivo terminado?
Mediante una llamada a su webhook firmado cuando la tarea termina, lo recomendado para automatización, o un enlace firmado válido por 24 horas si prefiere consultarlo usted mismo.
¿Qué pasa si la conversión falla?
La tarea reintenta automáticamente hasta tres veces; si sigue fallando recibe un error claro y nunca se le cobra por ello.
¿Puedo convertir muchos archivos Markdown a la vez?
Sí — envía una tarea por archivo. Cada llamada se tarifica y factura de forma independiente, así que la conversión en volumen escala de manera lineal y predecible.
¿Incrusta las imágenes referenciadas en el Markdown?
Sí, las referencias a imágenes se resuelven y se incrustan en la maquetación del PDF en la posición donde aparecen en el documento.
¿Se conserva mi contenido después de la conversión?
No. El origen y el resultado se eliminan al vencer el período de retención, y nada de lo que envía se usa jamás para entrenar modelos.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/pdf/from-markdown \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pdf":"https://ejemplo.com/documento.pdf"}'const res = await fetch("https://api.kit.forhosting.com/pdf/from-markdown", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pdf": "https://ejemplo.com/documento.pdf"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/from-markdown",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pdf": "https://ejemplo.com/documento.pdf"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/from-markdown", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pdf":"https://ejemplo.com/documento.pdf"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pdf":"https://ejemplo.com/documento.pdf"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/from-markdown", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"pdf": "https://ejemplo.com/documento.pdf"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.from_markdown",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
max_pages | 200 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
413 | input_too_large | El archivo supera el límite de tamaño. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |