Renders API

L'API Renders vous permet de générer des PDF remplis à partir de vos templates. Envoyez des données JSON et recevez une URL de téléchargement.

Endpoints

MéthodeEndpointDescription
POST/rendersCréer un render
GET/rendersLister les renders
GET/renders/:idRécupérer un render
GET/renders/usageStatistiques d'utilisation
DELETE/renders/:idSupprimer un render

Créer un render

POST /renders

Génère un PDF rempli à partir d'un template et de données JSON.

Request Body

ParamètreTypeRequisDescription
templateIdStringOuiID du template à remplir
dataObjectOuiDonnées à insérer dans le PDF
optionsObjectNonOptions de rendu

Options de rendu

OptionTypeDéfautDescription
flattenBooleantrueAplatir le PDF (rendre les champs non éditables)
localeString"fr-FR"Locale pour le formatage des dates
timezoneString"Europe/Paris"Timezone pour les dates
watermarkBoolean | "auto""auto"Ajouter un filigrane ("auto" = selon le plan)
strictBooleanfalseÉchouer si un champ est inconnu

Exemple

curl -X POST https://api.docflow.io/v1/renders \
  -H "Authorization: Bearer df_votre_cle_api" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "tpl_abc123",
    "data": {
      "employee_name": "Jean Dupont",
      "start_date": "2024-02-01",
      "contract_type": "CDI",
      "salary": 45000,
      "accept_terms": true
    },
    "options": {
      "flatten": true,
      "locale": "fr-FR"
    }
  }'

Response (201 Created)

{
  "data": {
    "renderId": "rnd_xyz789",
    "status": "completed",
    "downloadUrl": "https://storage.docflow.io/renders/rnd_xyz789.pdf?token=...",
    "expiresIn": 900,
    "fileSize": 256000,
    "durationMs": 342,
    "warnings": []
  }
}

Champs de réponse

ChampTypeDescription
renderIdStringID unique du render
statusString"completed" ou "failed"
downloadUrlStringURL présignée pour télécharger le PDF
expiresInIntegerDurée de validité de l'URL en secondes
fileSizeIntegerTaille du fichier en bytes
durationMsIntegerTemps de génération en millisecondes
warningsString[]Avertissements (champs ignorés, etc.)

Lister les renders

GET /renders

Query Parameters

ParamètreTypeDescription
pageIntegerNuméro de page (défaut: 1)
limitIntegerRésultats par page (défaut: 20, max: 100)
templateIdStringFiltrer par template
statusStringFiltrer par statut

Response

{
  "data": [
    {
      "id": "rnd_xyz789",
      "templateId": "tpl_abc123",
      "templateName": "Contrat de travail",
      "status": "completed",
      "fileSize": 256000,
      "durationMs": 342,
      "expiresAt": "2024-01-22T10:30:00Z",
      "createdAt": "2024-01-15T10:30:00Z",
      "downloadUrl": "https://..."
    }
  ],
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 42
  }
}

Statistiques d'utilisation

GET /renders/usage

Récupère les statistiques d'utilisation du mois en cours.

Response

{
  "data": {
    "plan": "pro",
    "month": "2024-01",
    "renders": {
      "used": 1250,
      "limit": 5000
    },
    "templates": {
      "used": 12,
      "limit": 50
    },
    "apiKeys": {
      "used": 3,
      "limit": 10
    },
    "features": {
      "webhooksEnabled": true,
      "watermark": false,
      "retentionDays": 30
    }
  }
}

Télécharger un PDF

L'URL de téléchargement (downloadUrl) est une URL présignée valide pendant 15 minutes (900 secondes). Utilisez cette URL directement pour télécharger le PDF :

curl -o document.pdf "https://storage.docflow.io/renders/rnd_xyz789.pdf?token=..."

Pour obtenir une nouvelle URL après expiration, récupérez le render avec GET /renders/:id.


Erreurs courantes

RENDER_LIMIT_REACHED

Vous avez atteint la limite de renders de votre plan pour ce mois.

{
  "error": {
    "code": "RENDER_LIMIT_REACHED",
    "message": "Monthly render limit reached (50/50)"
  }
}

TEMPLATE_NOT_FOUND

Le template spécifié n'existe pas ou a été supprimé.

{
  "error": {
    "code": "TEMPLATE_NOT_FOUND",
    "message": "Template 'tpl_abc123' not found"
  }
}

VALIDATION_ERROR

Les données fournies sont invalides (mauvais type, champ manquant en mode strict, etc.).

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid data for field 'salary': expected number, got string",
    "details": {
      "field": "salary",
      "expected": "number",
      "received": "string"
    }
  }
}

RENDER_FAILED

Une erreur s'est produite lors de la génération du PDF.

{
  "error": {
    "code": "RENDER_FAILED",
    "message": "Failed to render PDF: corrupted template file"
  }
}