Para desarrolladores

La generación ocurre a través de la API. No es una limitación, es el diseño.

Otra persona construyó la plantilla. Tú envías JSON a un endpoint y recibes un resultado de generación: el estado de cada documento, un enlace de descarga firmado y los bytes del PDF cuando los pides. De forma síncrona para un único documento, o como trabajo en cola con webhook firmado para un lote. Hay seis SDK nativos disponibles, más una API REST sencilla.

Leer la documentación →

Inicio rápido

Genera tu primer PDF en unas pocas líneas

Todos los SDK siguen la misma forma, así que el ejemplo de abajo es la integración completa en cualquiera de ellos. Elige tu stack:

Clientes tipados, idiomáticos en cada lenguaje
Las lecturas reintentan con backoff; las escrituras nunca generan dos veces
Versión de plantilla fijada por llamada, para que el resultado no se desvíe
C#POST /v1/render/{templateId}
var pagr = new PagrClient(
    Environment.GetEnvironmentVariable("PAGR_KEY"));

var result = await pagr.RenderAsync(templateId, new[] {
    new {
        customer = "Acme Inc.",
        total = 1240.00m,
        lines = order.Lines
    }
});
// result.Status, result.Documents[0].ViewUrl

La entrega

Recibes la especificación completa de la plantilla en markdown

Cada campo vinculado, su tipo, si es siempre obligatorio o condicional, un valor de ejemplo y el formato que aplica la plantilla: todo aparece en la lista. Pásaselo a tu asistente de IA para redactar el mapeo de datos, o simplemente léelo y termina en diez minutos.

epc-certificate-v1-data-model.mdgenerado desde la plantilla
# epc certificate — data model  ·  v1 (draft)

## Root object

| Field               | Type   | Required    | Example      |
|---------------------|--------|-------------|--------------|
| `certificateNumber` | string | Always      | "20240117-1" |
| `postalCode`        | string | Always      | "9000"       |
| `buildingPhoto`     | image  | Always      | "https://…"  |
| `energyScore`       | number | Always      | 148          |
| `expiryDate`        | date   | Always      | "2035-01-17" |
| `remarks`           | string | Conditional | null         |

`energyScore` prints as "148 kWh/m²", `expiryDate` as
"17 January 2035" — send raw values, the template formats.

… 4 more fields omitted.

Generado desde la plantilla, no de memoria

Se extrae de la plantilla que genera el documento, así que no puede quedarse obsoleto. Cuando el documento cambie, vuelve a generar la especificación y compárala con la anterior para ver exactamente qué campos se han movido.

Obligatorio o condicional, indicado de forma explícita

«Siempre» significa que el campo está vinculado fuera de cualquier condición. «Condicional» significa que vive dentro de un elemento condicional o una rama ternaria y puede faltar legítimamente.

Envía valores en bruto

Un número es un número y una fecha es una fecha ISO. La plantilla se encarga del formato, así que no construyes cadenas por tu lado.

Imágenes por URL

Envía una URL para fotos y logotipos. Los códigos de barras y QR no los envías: la plantilla los genera a partir del valor de tu JSON.

SDK

Seis clientes, un comportamiento

Cada SDK está escrito para sentirse nativo en su lenguaje y se mantiene a la par. Cada uno está en GitHub: elige un lenguaje para abrir su repositorio.

Generación masiva

El volumen pasa por el código, no por la interfaz

Generar en masa significa JSON hacia la API: un array de documentos en una sola llamada, o un trabajo asíncrono sobre un conjunto mayor. Es la versión de lo masivo que sigue comportándose bien cuando un registro viene mal formado a las 2 de la madrugada.

SYNC

Un documento, ahora mismo

Llama a render y la respuesta trae el resultado: estado, número de páginas y un enlace de descarga firmado, con los bytes del PDF incluidos cuando los pides. Úsalo en una ruta de petición: un usuario pulsa «descargar factura» y el documento llega.

ASYNC

Lanza y olvídate, a escala

Encola un trabajo y sigue con lo tuyo. Cuando termina recibes un webhook firmado y con marca de tiempo (HMAC-SHA256, compatible con rotación) en lugar de que te pidan confiar en una respuesta.

STREAM

Directo al usuario

Pide el PDF en bruto y genera sin persistencia: los bytes van directos a tu respuesta. Nada que limpiar, nada esperando en un bucket para convertirse en una cuestión de cumplimiento.

Nota

Pagr no entrega documentos. La generación termina al darte el PDF: enviarlo a un cliente, a un portal o a un archivo se queda en tu sistema, donde ya vive el registro de auditoría. El almacenamiento lo decides tú: guarda los archivos generados en Pagr con el periodo de retención que definas, o genera sin persistencia y no se conserva nada.

Plataforma

Hecho para estar debajo de un producto, no al lado

Aquí la multitenencia no es un nivel de plan. Organizaciones, proyectos, plantillas versionadas, claves con alcance limitado y seguimiento de uso son la forma en que está montada la plataforma.

Modelo de objetos
Pagr organisation
billing project
invoice v4 published
credit-note v2 published
onboarding project
welcome-letter v5 draft

Organizaciones y proyectos

Separa con limpieza tus entornos y tus clientes, con claves de API acotadas a cada uno.

Plantillas versionadas

Fija una versión por llamada. Revierte una edición defectuosa sin tocar un despliegue.

Uso y registros de auditoría

Sabe qué se generó, desde qué versión de plantilla y con qué clave.

Coge una clave y genera algo.

Un espacio de trabajo gratuito, una clave de prueba y 100 generaciones al mes. Sin tarjeta de crédito.

Leer la documentación