INTÉGRATION / V1

Votre première requête PDF.

Un template, une API key et JSON. Ce guide utilise les mêmes données fictives que l’aperçu de la page d’accueil.

01 / Créez votre template

Ouvrez la Console, enregistrez le HTML d’exemple comme template et copiez son template_id. Créez une API key pour le même compte. Conservez-la sur votre serveur dans SYSINVOICE_API_KEY, jamais dans le code du navigateur.

Console

Le template d’exemple

Cet exemple A4 minimal accepte une ligne de quantité 1. Calculez les totaux dans votre application pour les factures plus complexes. Le CSS est intégré ; aucune ressource distante ni script n’est nécessaire.

Télécharger le template HTML
Le template d’exemple
<!doctype html>
<html lang="en"><head><meta charset="utf-8">
<style>
@page { size: A4; margin: 0; }
* { box-sizing: border-box; }
body { margin: 0; padding: 64px; color: #15223b; font: 15px Arial, sans-serif; }
header { display: flex; justify-content: space-between; border-bottom: 3px solid #0891b2; padding-bottom: 32px; }
h1 { font-size: 38px; margin: 0 0 10px; letter-spacing: -1px; }
h2 { font-size: 16px; margin: 0 0 8px; }
p { line-height: 1.7; }
.muted { color: #526078; font-size: 12px; }
.meta { margin: 38px 0; display: flex; justify-content: space-between; }
table { width: 100%; border-collapse: collapse; margin-top: 42px; }
th { padding: 14px 8px; text-align: left; background: #f1f5f9; color: #526078; font-size: 11px; }
td { padding: 22px 8px; border-bottom: 1px solid #dbe2eb; }
.right { text-align: right; }
.total { display: flex; justify-content: space-between; margin-top: 30px; padding: 24px 8px; background: #ecfeff; font-weight: bold; font-size: 20px; }
footer { margin-top: 180px; padding-top: 20px; border-top: 1px solid #dbe2eb; }
</style></head><body>
<header><div><h2>NORTHSTAR / STUDIO</h2><span class="muted">Digital products &amp; engineering</span></div><span class="muted">INVOICE</span></header>
<div class="meta"><div><h1>{{ .invoice_number }}</h1><span class="muted">Issued {{ .issued_at }}</span></div><div><span class="muted">BILL TO</span><p>Acme Labs<br>Sample account</p></div></div>
<table><thead><tr><th>DESCRIPTION</th><th class="right">QTY</th><th class="right">AMOUNT</th></tr></thead><tbody>
{{ range .line_items }}<tr><td>{{ .description }}</td><td class="right">{{ .qty }}</td><td class="right">{{ .amount }} {{ $.currency }}</td></tr>{{ end }}
</tbody></table>
<div class="total"><span>Total</span><span>{{ .total }} {{ .currency }}</span></div>
<p class="muted">Thank you for building with us.</p>
<footer class="muted">SysInvoice / Fictional example / One line item, quantity 1 / 01</footer>
</body></html>

02 / Envoyez la requête

Remplacez tpl_your_invoice_template par l’ID de la Console. Le corps JSON accepte template_id et document_data, avec un maximum de 2 MiB. Cet exemple ne fait aucun appel API depuis le site.

Requête
curl --fail-with-body --request POST \  https://api.sysinvoice.com/v1/invoices/generate \  --header "Authorization: Bearer $SYSINVOICE_API_KEY" \  --header 'Content-Type: application/json' \  --header 'Accept: application/pdf' \  --data '{  "template_id": "tpl_your_invoice_template",  "document_data": {    "invoice_number": "INV-2026-001",    "issued_at": "2026-11-10",    "currency": "EUR",    "line_items": [      {        "description": "API integration",        "qty": 1,        "price": 240,        "amount": "240.00"      }    ],    "total": "240.00"  }}' \  --output invoice.pdf
Exemple uniquement : configurez votre API key et remplacez template_id par l’ID de votre template enregistré.

03 / Traitez la réponse

Une requête réussie renvoie HTTP 200 et des octets application/pdf, avec Cache-Control: no-store et X-Request-Id pour le diagnostic. Enregistrez ou transmettez la réponse depuis votre application.

Ouvrir le PDF d’exemple

Gérez explicitement les erreurs

Un JSON mal formé renvoie 400 ; des identifiants invalides 401 ; un template inconnu 404 ; des données invalides 422. Pour 429, respectez Retry-After. Avec --fail-with-body, cURL échoue pour les erreurs HTTP : vérifiez la réponse avant de traiter le fichier comme un PDF.