Pour les développeurs

Le rendu passe par l'API. Ce n'est pas une limite, c'est le principe.

Quelqu'un d'autre a construit le template. Vous envoyez du JSON à un endpoint et récupérez un résultat de rendu — le statut de chaque document, un lien de téléchargement signé et les octets du PDF eux-mêmes si vous les demandez — en synchrone pour un document unique, ou en tâche mise en file avec webhook signé pour un lot. Six SDK natifs sont disponibles, plus une API REST simple.

Lire la documentation →

Démarrage rapide

Générez votre premier PDF en quelques lignes

Tous les SDK suivent la même forme : l'exemple ci-dessous constitue l'intégration complète dans chacun d'eux. Choisissez votre stack :

Clients typés, idiomatiques dans chaque langage
Les lectures réessaient avec backoff ; les écritures ne génèrent jamais deux fois
Version du template épinglée par appel, pour que le résultat ne dérive pas
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 passation

Vous recevez la spécification markdown complète du template

Chaque champ lié, son type, s'il est toujours requis ou conditionnel, une valeur d'exemple et le formatage appliqué par le template : tout y est listé. Confiez-le à votre assistant IA pour rédiger le mapping des données, ou lisez-le simplement et terminez en dix minutes.

epc-certificate-v1-data-model.mdgénéré depuis le template
# 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.

Généré depuis le template, pas de mémoire

Il est extrait du template qui effectue le rendu : il ne peut pas être obsolète. Quand le document change, générez à nouveau la spécification et comparez-la à la précédente pour voir exactement quels champs ont bougé.

Requis ou conditionnel, indiqué explicitement

« Toujours » signifie que le champ est lié hors de toute condition. « Conditionnel » signifie qu'il se trouve dans un élément conditionnel ou une branche ternaire et peut légitimement être absent.

Envoyez des valeurs brutes

Un nombre est un nombre et une date est une date ISO. Le template gère le formatage : vous ne construisez pas de chaînes de votre côté.

Images par URL

Envoyez une URL pour les photos et les logos. Les codes-barres et QR codes, vous ne les envoyez pas : le template les génère à partir de la valeur présente dans votre JSON.

SDK

Six clients, un seul comportement

Chaque SDK est écrit pour paraître natif dans son langage et maintenu à parité. Chacun est sur GitHub — choisissez un langage pour ouvrir son dépôt.

Génération en masse

Le volume passe par le code, pas par l'interface

Le rendu en masse, c'est du JSON vers l'API — un tableau de documents en un seul appel, ou une tâche asynchrone sur un ensemble plus large. C'est la version du traitement par lot qui tient encore quand un enregistrement est mal formé à 2 h du matin.

SYNC

Un document, tout de suite

Appelez render et la réponse contient le résultat : statut, nombre de pages et lien de téléchargement signé, avec les octets du PDF intégrés si vous les demandez. À utiliser dans un chemin de requête : un utilisateur clique sur « télécharger la facture » et le document arrive.

ASYNC

Lancez et oubliez, à grande échelle

Mettez une tâche en file et passez à autre chose. À la fin, vous recevez un webhook signé et horodaté — HMAC-SHA256, compatible rotation — au lieu qu'on vous demande de faire confiance à une réponse.

STREAM

Directement vers l'utilisateur

Demandez le PDF brut et lancez le rendu sans persistance : les octets passent directement dans votre réponse. Rien à nettoyer, rien qui traîne dans un bucket en attendant de devenir une question de conformité.

Note

Pagr ne distribue pas les documents. La génération s'arrête à la remise du PDF — l'envoi vers un client, un portail ou une archive reste dans votre système, là où la piste d'audit existe déjà. Le stockage, c'est votre choix : gardez les fichiers générés dans Pagr avec une durée de conservation que vous définissez, ou effectuez le rendu sans persistance et rien n'est conservé.

Plateforme

Conçu pour vivre sous un produit, pas à côté

Le multi-tenant n'est pas un palier tarifaire ici. Organisations, projets, templates versionnés, clés à portée limitée et suivi de consommation : c'est ainsi que la plateforme est construite.

Modèle objet
Pagr organisation
billing project
invoice v4 published
credit-note v2 published
onboarding project
welcome-letter v5 draft

Organisations et projets

Séparez proprement vos environnements et vos clients, avec des clés API limitées à chacun.

Templates versionnés

Épinglez une version par appel. Revenez sur une mauvaise modification sans toucher à un déploiement.

Consommation et pistes d'audit

Sachez ce qui a été généré, depuis quelle version de template, avec quelle clé.

Prenez une clé et générez quelque chose.

Un espace de travail gratuit, une clé de test et 100 rendus par mois. Aucune carte bancaire requise.

Lire la documentation