Générez un reçu avec des totaux détaillés
Transformez les données d’un achat en reçu cohérent sans recréer les calculs et la mise en forme dans chaque application.
Lancer gratuitement
Indiquez le commerçant, au moins un article et le moyen de paiement. Le générateur calcule les sous-totaux, les taxes et le total, puis attribue un numéro stable. Le JSON obtenu peut être archivé, affiché, associé à une commande ou transmis à un autre flux documentaire.
Préparez toutes les données du reçu
Saisissez le nom du commerçant tel qu’il doit apparaître, puis ajoutez séparément chaque produit ou service. Chaque ligne exige une description, une quantité et un prix unitaire. Les quantités décimales conviennent aux marchandises mesurées, aux heures, au poids ou à la distance. Ajoutez un taux de taxe uniquement si nécessaire. Choisissez un moyen de paiement affichable, comme des espèces, un virement ou une carte masquée, sans jamais envoyer d’identifiants complets. La devise est facultative et vaut USD par défaut. Des descriptions concises et des données protégées donnent un registre lisible. Au moins une ligne est indispensable, car un achat vide ne constitue pas un reçu valable.
Comprenez les calculs et le numéro
Le générateur convertit chaque prix en unités monétaires mineures avant de le multiplier par la quantité, ce qui évite les artefacts de virgule flottante. Chaque sous-total est arrondi, puis sa taxe est calculée. Le sous-total général additionne les lignes, la taxe totale additionne leurs taxes et le total final réunit les deux. Le montant payé lui correspond toujours. Le numéro dérive des données normalisées : une requête identique renvoie donc le même identifiant, pratique pour les nouvelles tentatives et la détection des doublons. Il ne remplace toutefois aucune séquence fiscale officielle, autorisation administrative ou numérotation comptable obligatoire.
Intégrez le document structuré
La réponse sépare l’identité, le commerçant, les lignes calculées, le paiement et les totaux. Vous pouvez ainsi produire un reçu imprimable, archiver un achat normalisé, remplir un e-mail ou alimenter un générateur de PDF. Conservez la réponse avec la requête initiale afin de faciliter le rapprochement. Le numéro stable constitue une référence utile, mais votre base doit appliquer ses propres règles. Les données incomplètes sont rejetées explicitement, sans invention silencieuse. Aucun réseau, stockage, date actuelle ni hasard n’intervient, ce qui assure des résultats reproductibles. Chaque requête coûte $0.002 et convient aux petits flux transactionnels exigeant des données prévisibles.
Cas d’usage
Créez un reçu de commande
Convertissez des articles et un paiement masqué en registre cohérent à conserver ou afficher.
Préparez les données d’un PDF
Calculez des lignes et totaux fiables avant la transmission à un moteur de rendu PDF.
Normalisez les ventes manuelles
Transformez les saisies de caisse ou de gestion en schéma prévisible pour le rapprochement et l’assistance.
Questions fréquentes
Quel est le prix ?
Chaque requête API coûte $0.002.
Puis-je créer un reçu sans article ?
Non. Une ligne au minimum est exigée ; une liste vide provoque une erreur de saisie.
Comment les taxes sont-elles calculées ?
Elles sont calculées par ligne sur son sous-total arrondi, puis additionnées.
Le numéro de reçu est-il aléatoire ?
Non. Il dérive des données normalisées ; des entrées identiques donnent le même numéro.
Ce reçu est-il une facture fiscale conforme ?
Non. Vous devez respecter vous-même les règles locales de numérotation et d’enregistrement.
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/receipt-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"merchant_name":"Northwind Coffee","line_items":[{"description":"Cappuccino","quantity":2,"unit_price":4.5,"tax_rate":8.25},{"description":"Blueberry muffin","quantity":1,"unit_price":3.25}],"payment_method":"Visa ending 4242"}'const res = await fetch("https://api.kit.forhosting.com/doc/receipt-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"merchant_name": "Northwind Coffee",
"line_items": [
{
"description": "Cappuccino",
"quantity": 2,
"unit_price": 4.5,
"tax_rate": 8.25
},
{
"description": "Blueberry muffin",
"quantity": 1,
"unit_price": 3.25
}
],
"payment_method": "Visa ending 4242"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/receipt-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"merchant_name": "Northwind Coffee",
"line_items": [
{
"description": "Cappuccino",
"quantity": 2,
"unit_price": 4.5,
"tax_rate": 8.25
},
{
"description": "Blueberry muffin",
"quantity": 1,
"unit_price": 3.25
}
],
"payment_method": "Visa ending 4242"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/receipt-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"merchant_name":"Northwind Coffee","line_items":[{"description":"Cappuccino","quantity":2,"unit_price":4.5,"tax_rate":8.25},{"description":"Blueberry muffin","quantity":1,"unit_price":3.25}],"payment_method":"Visa ending 4242"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"merchant_name":"Northwind Coffee","line_items":[{"description":"Cappuccino","quantity":2,"unit_price":4.5,"tax_rate":8.25},{"description":"Blueberry muffin","quantity":1,"unit_price":3.25}],"payment_method":"Visa ending 4242"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/receipt-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
{
"merchant_name": "Northwind Coffee",
"line_items": [
{
"description": "Cappuccino",
"quantity": 2,
"unit_price": 4.5,
"tax_rate": 8.25
},
{
"description": "Blueberry muffin",
"quantity": 1,
"unit_price": 3.25
}
],
"payment_method": "Visa ending 4242"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.receipt_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. |