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.
ConsoleLe 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 HTMLLe 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 & 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.
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.pdf03 / 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’exempleGé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.