Invovate ← Retour au Générateur de Factures

API de Facturation — Documentation

Générez des factures PDF professionnelles par programmation via une API REST simple

v1.0

Vue d'ensemble

L'API de facturation Invovate permet aux développeurs de générer des factures professionnelles en un seul appel HTTP POST. Vous pouvez choisir entre une réponse JSON structurée avec tous les calculs ou un téléchargement PDF direct. L'API prend en charge 11 langues, plus de 20 devises et 5 modèles de design — idéale pour les freelances, les entreprises SaaS et les applications comptables françaises et francophones.

Gratuit pour démarrer

40 requêtes/heure, sans carte bancaire

JSON ou PDF

Choisissez votre format de sortie

TVA automatique

Par ligne ou globale (20%/10%/5.5%)

Multilingue

fr, en, de, es, nl et plus

URL de base :
https://invovate.com/api

Démarrage rapide

Votre première facture en trois étapes :

Étape 1 — Créer un compte
Inscrivez-vous gratuitement sur invovate.com et vérifiez votre adresse e-mail.
Étape 2 — Obtenir une clé API
Accédez au tableau de bord et cliquez sur "Générer une clé API". Votre clé commence par inv_.
Étape 3 — Premier appel
curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_votreCleApi" \ -d '{ "from": {"name": "Mon Entreprise SARL"}, "to": {"name": "Client SA"}, "items": [{"description": "Developpement web", "quantity": 1, "unit_price": 3000, "tax_rate": 20}], "invoice": {"currency": "EUR", "language": "fr"} }'

Authentification

L'API prend en charge trois méthodes d'authentification :

1. Clé API (recommandé côté serveur)

Authorization: Bearer inv_votreCleApiIci

2. Cookie de session (pour les applications web)

Si vous êtes connecté via le navigateur, le cookie inv_session est envoyé automatiquement.

3. Anonyme (sans authentification)

Les appels sans authentification sont possibles mais limités à la sortie JSON et restreints par adresse IP. Utile pour tester l'API.

Sécurité : N'incluez jamais votre clé API dans du code côté client ni dans un dépôt Git. Utilisez des variables d'environnement sur votre serveur.

Limites & Tarifs

PlanPrixPar heurePar semaine
Gratuit0 €40400
Starter9 €/mois2004 000
Pro29 €/mois1 00040 000
EnterpriseSur devisIllimitéIllimité

Les limites sont renvoyées dans les en-têtes de réponse :

X-RateLimit-Limit-Hourly: 40 X-RateLimit-Remaining-Hourly: 39 X-RateLimit-Reset-Hourly: 1712123456 X-RateLimit-Limit-Weekly: 400 X-RateLimit-Remaining-Weekly: 399 X-RateLimit-Reset-Weekly: 1712345678

Générer une facture

POST
/api/generate-invoice

Génère une facture et renvoie un JSON avec tous les calculs ou un fichier PDF binaire.

Format de requête

Émetteur (from)

ChampTypeRequisDescription
from.namestringOuiNom de votre entreprise
from.addressstringNonAdresse de votre entreprise
from.emailstringNonVotre adresse e-mail
from.tax_idstringNonNuméro SIRET ou TVA intracommunautaire

Destinataire (to)

ChampTypeRequisDescription
to.namestringOuiNom du client ou de l'entreprise
to.addressstringNonAdresse du client
to.emailstringNonE-mail du client

Données de la facture (invoice)

ChampTypeDéfautDescription
invoice.numberstringAutoNuméro de facture
invoice.datestringAujourd'huiDate d'émission (AAAA-MM-JJ)
invoice.due_datestringDate d'échéance (AAAA-MM-JJ)
invoice.currencystringUSDCode devise (ex. EUR)
invoice.languagestringenCode langue (ex. fr)
invoice.termsstringConditions de paiement
invoice.po_numberstringNuméro de bon de commande

Lignes (items tableau)

ChampTypeRequisDescription
descriptionstringOuiDescription du produit ou service
quantitynumberOuiQuantité
unit_pricenumberOuiPrix unitaire HT
discountnumberNonRemise (pourcentage ou montant)
discount_typestringpercent"percent" ou "amount"
tax_ratenumberNonTaux de TVA par ligne (ex. 20)

Autres champs

ChampTypeDescription
global_taxnumberTVA globale (appliquée si aucun taux par ligne)
global_discountnumberRemise sur le total
global_discount_typestring"percent" ou "amount"
amount_paidnumberMontant déjà réglé (pour paiement partiel)
notesstringNotes en bas de facture
refund_policystringPolitique de remboursement
templatestringNom du modèle : classic, modern, bold, minimal, navy
outputstring"json" (défaut) ou "pdf"

Format de réponse

Réponse JSON (output: "json")

{ "success": true, "invoice": { "number": "FACT-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "fr", "template": "classic", "from": { "name": "Mon Entreprise SARL", "tax_id": "FR12345678901" }, "to": { "name": "Client SA" }, "items": [ { "description": "Developpement web", "quantity": 1, "unit_price": 3000, "discount": 0, "tax_rate": 20, "tax_amount": 600.00, "line_total": 3600.00 } ], "subtotal": 3000.00, "global_discount": 0, "total_tax": 600.00, "grand_total": 3600.00, "amount_paid": 0, "balance_due": 3600.00, "notes": "Merci pour votre confiance." }, "meta": { "processing_ms": 11, "credits_remaining": { "hourly": 39, "weekly": 399 } } }

Réponse PDF (output: "pdf")

Renvoie un fichier PDF binaire avec les en-têtes suivants :

Content-Type: application/pdf Content-Disposition: attachment; filename="facture.pdf"

Codes d'erreur

{ "success": false, "error": { "message": "Au moins un article est requis" } }
Statut HTTPSignification
400Erreur de validation — vérifiez le format de votre requête
401Authentification requise ou clé API invalide
403Adresse e-mail non vérifiée
429Limite de débit dépassée
500Erreur interne du serveur

Endpoints d'authentification

MéthodeCheminDescription
POST/api/auth/registerCréer un compte avec e-mail et mot de passe
POST/api/auth/loginSe connecter, renvoie un cookie de session
POST/api/auth/logoutSe déconnecter
GET/api/auth/meObtenir les infos utilisateur et la clé API
POST/api/auth/generate-api-keyGénérer une nouvelle clé API (e-mail vérifié requis)

Exemples de code

cURL — Facture PDF avec TVA française

curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_votreCleApi" \ -d '{ "from": { "name": "Agence Web Paris SARL", "address": "12 Rue de Rivoli, 75001 Paris", "tax_id": "FR12345678901", "email": "[email protected]" }, "to": { "name": "Entreprise Cliente SA", "address": "5 Place Bellecour, 69002 Lyon", "email": "[email protected]" }, "invoice": { "number": "FACT-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "fr", "terms": "30 jours net" }, "items": [ {"description": "Conception site web", "quantity": 1, "unit_price": 4000, "tax_rate": 20}, {"description": "Redaction de contenu", "quantity": 8, "unit_price": 150, "tax_rate": 20} ], "notes": "Merci pour votre confiance.", "template": "modern", "output": "pdf" }' --output facture.pdf

JavaScript (Node.js)

// Générer une facture avec l'API Invovate const response = await fetch('https://invovate.com/api/generate-invoice', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer inv_votreCleApi' }, body: JSON.stringify({ from: { name: 'Mon Entreprise SARL', tax_id: 'FR12345678901' }, to: { name: 'Client SA', email: '[email protected]' }, invoice: { number: 'FACT-001', currency: 'EUR', language: 'fr', due_date: '2026-05-03' }, items: [{ description: 'Conseil', quantity: 10, unit_price: 120, tax_rate: 20 }], output: 'json' }) }); const data = await response.json(); if (data.success) { console.log('Total TTC :', data.invoice.grand_total, 'EUR'); console.log('Requetes restantes (heure) :', data.meta.credits_remaining.hourly); }

Python

import requests API_KEY = "inv_votreCleApi" URL = "https://invovate.com/api/generate-invoice" facture = { "from": { "name": "Freelance Lyon", "tax_id": "FR12345678901" }, "to": { "name": "Entreprise SA", "address": "10 Rue du Commerce, 75015 Paris" }, "invoice": { "number": "FACT-2026-001", "currency": "EUR", "language": "fr", "terms": "30 jours net" }, "items": [ {"description": "Design graphique", "quantity": 1, "unit_price": 1500, "tax_rate": 20}, {"description": "Illustrations", "quantity": 4, "unit_price": 200, "tax_rate": 20} ], "output": "pdf" } response = requests.post(URL, json=facture, headers={"Authorization": f"Bearer {API_KEY}"}) if response.status_code == 200: with open("facture.pdf", "wb") as f: f.write(response.content) print("Facture sauvegardee : facture.pdf") else: print(f"Erreur : {response.json()['error']['message']}")

Langues prises en charge

CodeLangueDirection
frFrançaisLTR
enAnglaisLTR
deAllemandLTR
nlNéerlandaisLTR
esEspagnolLTR
itItalienLTR
ptPortugaisLTR
ruRusseLTR
hiHindiLTR
jaJaponaisLTR
arArabeRTL

Modèles PDF

NomStyle
classicAccent bleu, lignes grises alternées (défaut)
modernTeal/cyan, design moderne épuré
boldEn-tête anthracite sombre, fort contraste
minimalGris clair, sans bordures
navyEn-tête bleu marine avec liseré doré

Devises prises en charge

EUR, USD, GBP, JPY, CAD, AUD, CHF, CNY, INR, AED, SAR, SGD, NZD, KRW, BRL, MXN, ZAR, SEK, NOK, DKK