Générez une facture avec totaux et taxe calculés
Transformez des données de facturation élémentaires en un document cohérent sans reproduire les règles de calcul dans chaque application.
Lancer gratuitement
Indiquez le vendeur, l’acheteur, les lignes, les quantités, les prix unitaires et un taux de taxe en pourcentage. Le générateur calcule chaque montant de ligne, le sous-total, la taxe et le total général, puis renvoie les données fournies et calculées dans un objet prévisible que vous pouvez stocker, contrôler, afficher ou transmettre à un autre processus.
Préparez toutes les données de facturation
Commencez par identifier les deux parties à la transaction. Les champs vendeur et acheteur peuvent contenir les noms ainsi que l’adresse, l’immatriculation ou les coordonnées que votre traitement ultérieur doit conserver. Ajoutez ensuite au moins une ligne. Chacune exige une description claire, une quantité numérique et un prix unitaire numérique. Le taux de taxe s’exprime en pourcentage : saisissez 8.25 pour appliquer 8.25 pour cent, et non 0.0825. Les quantités fractionnaires conviennent aux prestations mesurées en heures, au poids, à la distance ou selon une autre unité divisible. Les prix peuvent également comporter des décimales. Les quantités et prix négatifs sont refusés, car ils signalent généralement une facture incorrecte ou un ajustement qui relève d’un avoir distinct. Utilisez zéro uniquement lorsqu’une ligne réellement gratuite doit figurer sur la facture. Des descriptions précises facilitent le rapprochement du document avec les commandes, livraisons et contrats. La requête ne contient ni date ni identifiant généré : une entrée identique produit donc toujours la même sortie.
Comprenez le calcul de chaque montant
Pour chaque ligne, le générateur multiplie la quantité par le prix unitaire, puis arrondit le montant obtenu à deux décimales. Il additionne ensuite ces montants déjà arrondis afin d’établir le sous-total. La taxe correspond au sous-total multiplié par le taux en pourcentage fourni et est elle aussi arrondie à deux décimales. Enfin, cette taxe arrondie est ajoutée au sous-total pour former le total général. Cet ordre explicite et déterministe est essentiel, car des logiciels comptables peuvent produire des écarts lorsqu’ils arrondissent à une autre étape. La sortie conserve chaque description et quantité, présente les prix unitaires sous forme monétaire et ajoute line_total à chaque ligne. Au niveau du document, elle comprend subtotal, tax_rate, tax et grand_total, ainsi que le vendeur et l’acheteur. Aucune devise n’est convertie ou devinée : tous les prix doivent utiliser une même devise choisie par l’appelant. La réponse constitue un enregistrement structuré des données et calculs, prêt pour un modèle, une base, une validation ou une intégration API, et non un PDF ou une image.
Intégrez le calcul en toute sécurité
Placez cette capacité au moment où les données modifiables d’une commande deviennent un enregistrement de facture. Vérifiez d’abord le contexte commercial : parties, devise, juridiction fiscale et éventuels besoins de remise, retenue, taux multiples ou avoir. Envoyez ensuite les lignes normalisées et conservez l’objet renvoyé comme résultat du calcul. L’algorithme n’utilise ni réseau, ni valeur aléatoire, ni horloge, ni état caché ; une même requête peut donc être relancée sans risque et comparée lors d’un audit. Une erreur est renvoyée lorsqu’un champ obligatoire manque, qu’un montant n’est pas numérique, que la liste est vide ou trop longue, que le taux est négatif et, surtout, qu’une quantité ou un prix de ligne est négatif. Corrigez ces erreurs avant d’attribuer un numéro ou d’envoyer quoi que ce soit au client. Le résultat peut alimenter un modèle HTML, un import comptable, un générateur de pièce jointe ou une file d’approbation, mais ces actions restent distinctes. Les requêtes API coûtent $0.002 et le navigateur exécute la même logique pure.
Cas d’usage
Facturer les commandes approuvées
Transformez des lignes de commande normalisées en facture structurée avec des montants et taxes cohérents.
Alimenter un formulaire de facture
Calculez les totaux pendant que vous saisissez les parties, les lignes et la taxe, puis transmettez le résultat à un moteur d’affichage.
Uniformiser les intégrations
Fournissez à plusieurs applications un contrat de calcul déterministe avant la comptabilisation ou l’approbation.
Questions fréquentes
Quel est le prix d’une requête ?
Chaque requête API coûte $0.002.
Comment indiquer le taux de taxe ?
Saisissez un pourcentage numérique. Par exemple, utilisez 8.25 pour appliquer un taux de 8.25 pour cent.
Comment les montants sont-ils arrondis ?
Chaque montant de ligne est arrondi à deux décimales ; ces lignes forment le sous-total, puis la taxe est calculée et arrondie.
Puis-je utiliser des valeurs négatives pour un avoir ?
Non. Toute quantité ou tout prix unitaire négatif entraîne une erreur de saisie. Utilisez un processus d’avoir dédié.
Le résultat comprend-il un PDF ou un numéro ?
Non. Il renvoie des données de facture structurées avec les totaux. Affichage, numérotation, devise et envoi sont des étapes distinctes.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/doc/invoice-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"seller":"Northwind Studio","buyer":"Contoso Retail","line_items":[{"description":"Design consultation","quantity":2,"unit_price":125},{"description":"Style guide","quantity":1,"unit_price":80.5}],"tax_rate":8.25}'const res = await fetch("https://api.kit.forhosting.com/doc/invoice-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"seller": "Northwind Studio",
"buyer": "Contoso Retail",
"line_items": [
{
"description": "Design consultation",
"quantity": 2,
"unit_price": 125
},
{
"description": "Style guide",
"quantity": 1,
"unit_price": 80.5
}
],
"tax_rate": 8.25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/invoice-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"seller": "Northwind Studio",
"buyer": "Contoso Retail",
"line_items": [
{
"description": "Design consultation",
"quantity": 2,
"unit_price": 125
},
{
"description": "Style guide",
"quantity": 1,
"unit_price": 80.5
}
],
"tax_rate": 8.25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/invoice-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"seller":"Northwind Studio","buyer":"Contoso Retail","line_items":[{"description":"Design consultation","quantity":2,"unit_price":125},{"description":"Style guide","quantity":1,"unit_price":80.5}],"tax_rate":8.25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"seller":"Northwind Studio","buyer":"Contoso Retail","line_items":[{"description":"Design consultation","quantity":2,"unit_price":125},{"description":"Style guide","quantity":1,"unit_price":80.5}],"tax_rate":8.25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/invoice-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"seller": "Northwind Studio",
"buyer": "Contoso Retail",
"line_items": [
{
"description": "Design consultation",
"quantity": 2,
"unit_price": 125
},
{
"description": "Style guide",
"quantity": 1,
"unit_price": 80.5
}
],
"tax_rate": 8.25
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.invoice_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 25 |
max_pages | 200 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |