Coût par portion de recette
Farine, œufs, lait et beurre qui coûtent 6,7 au total, partagés en 4 portions, reviennent à 1,675 par assiette. Saisissez ce qu'a coûté chaque ingrédient du lot et le nombre de parts : vous obtenez le total, le coût par assiette et chaque étape. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Un calculateur de coût par portion transforme la liste d’achats d’une recette et le rendement du lot en un chiffre honnête : ce qu’un assiette coûte vraiment. Saisissez le coût de chaque ingrédient de la recette complète —farine, œufs, lait, épices, huile— et le nombre de parts que le lot produit ; l’outil additionne les lignes, divise par les parts et renvoie le coût total, le coût par portion, les lignes d’ingrédients étiquetées et l’arithmétique étape par étape que vous pouvez coller dans un tableur de meal-prep ou un devis traiteur.
Ce que signifie le coût par portion pour un lot de recette
Le coût par portion est l’argent total dépensé en ingrédients pour un lot cuit, divisé par le nombre de parts que ce lot doit nourrir. Si un gratin de pâtes utilise farine, œufs, lait et beurre qui coûtent ensemble six dollars soixante-dix et que le plat est coupé en quatre parts égales, chaque assiette coûte un dollar soixante-sept et demi avant main-d’œuvre, énergie, emballage ou marge.
Ce chiffre est le fondement du budget repas à domicile, des fiches de blogs culinaires, de l’ingénierie de menus de cantine et des devis traiteur ligne par ligne. Ce n’est pas le même concept que le prix unitaire en rayon : le prix unitaire compare le paquet A au paquet B par prix sur onces ; le coût par portion agrège plusieurs ingrédients déjà achetés pour une recette et répartit cette somme entre assiettes.
Ce n’est pas non plus un convertisseur d’échelle de recette : l’échelle multiplie les quantités quand vous changez le nombre de convives ; ce calculateur suppose que vous connaissez déjà l’argent dépensé pour les quantités que vous cuisinerez et n’a besoin que de l’arithmétique total sur parts. Zéro part est une erreur dure car il n’y a pas d’assiette à laquelle allouer le coût, et un nombre de parts négatif n’est pas un rendement physique dans ce modèle.
Les basiques gratuits du garde-manger peuvent être saisis à coût zéro quand vous les excluez volontairement ; la somme fonctionne toujours. Les enseignants de maths du consommateur, les diététiciens qui construisent des plans de repas et les chefs de produit qui livrent des widgets de coût de repas ont besoin du même contrat déterministe : mêmes coûts d’ingrédients, mêmes parts, même coût par portion et total, dans tout environnement.
Conseils pratiques, limites et recherches associées
Saisissez les coûts des quantités que vous utiliserez réellement dans le lot, pas du paquet entier du magasin sauf si vous l’utilisez en entier. Si la moitié d’un carton de crème à deux dollars entre dans la soupe, utilisez un dollar comme coût de cette ligne pour que le chiffre de l’assiette reste honnête. Préférez envoyer des nombres plutôt que des chaînes formatées en devise ; les nombres en chaîne ne sont acceptés que s’ils correspondent à un motif numérique fini strict sans signes dollar ni virgules.
Gardez chaque coût non négatif —zéro est autorisé pour des échantillons gratuits ou basiques exclus— tandis que les parts doivent rester strictement positives. Cette page cible ceux qui cherchent un calculateur de coût par portion de recette, un outil de coût de repas par part, ou une aide au budget d’ingrédients ; ce n’est pas un scraper de prix en direct, ni un comparateur de prix unitaire en rayon, ni un convertisseur de quantités de recette.
Préférez cette capacité quand vous connaissez déjà les coûts d’ingrédients et le rendement du lot ; si votre source est une photo de ticket, extrayez d’abord ces nombres.
Cas d’usage
Budget meal-prep à la maison
Les cuisiniers listent chaque coût d’ingrédient d’un lot, indiquent combien de parts il produit et voient le vrai coût de l’assiette avant les courses ou la cuisine de la semaine.
Notes de prix sur blogs et fiches recette
Les auteurs joignent un coût approximatif par portion aux recettes publiées pour que les lecteurs comparent les idées de repas par budget, goût et temps.
Devis traiteur et maths de menu cantine
Les équipes additionnent les coûts d’ingrédients d’un plat et divisent par les parts prévues pour amorcer prix de menu, repas scolaires ou devis d’événement avant marge.
Questions fréquentes
Comment calcule-t-on le coût par portion ?
Additionnez chaque coût d’ingrédient du lot complet, puis divisez ce total par le nombre de parts.
Faut-il un nom pour chaque ingrédient ?
Non. Vous pouvez envoyer des nombres seuls comme coûts, ou des objets avec seulement un champ cost. Les noms optionnels apparaissent dans la réponse et steps s’ils sont fournis.
Compare-t-il les prix unitaires en supermarché ?
Non. Il répartit les coûts d’ingrédients d’une recette entre les parts. Pour comparer des paquets en rayon, utilisez un outil de prix unitaire.
Le calculateur de coût de recette est-il gratuit ?
L’outil navigateur est gratuit et s’exécute en local.
Quel coût saisir pour un ingrédient utilisé en partie seulement ?
Saisissez uniquement la part qui entre dans la recette. Si la moitié d'une brique de crème payée 2 finit dans la soupe, indiquez 1 sur cette ligne pour que le coût par portion reste juste.
Outils associés
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/life/cost-per-serving \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ingredients":[{"name":"Flour 1 kg","cost":1.2},{"name":"Eggs (6)","cost":2.4},{"name":"Milk 1 L","cost":1.1},{"name":"Butter 250 g","cost":2}],"servings":4}'const res = await fetch("https://api.kit.forhosting.com/life/cost-per-serving", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ingredients": [
{
"name": "Flour 1 kg",
"cost": 1.2
},
{
"name": "Eggs (6)",
"cost": 2.4
},
{
"name": "Milk 1 L",
"cost": 1.1
},
{
"name": "Butter 250 g",
"cost": 2
}
],
"servings": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/cost-per-serving",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ingredients": [
{
"name": "Flour 1 kg",
"cost": 1.2
},
{
"name": "Eggs (6)",
"cost": 2.4
},
{
"name": "Milk 1 L",
"cost": 1.1
},
{
"name": "Butter 250 g",
"cost": 2
}
],
"servings": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/cost-per-serving", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ingredients":[{"name":"Flour 1 kg","cost":1.2},{"name":"Eggs (6)","cost":2.4},{"name":"Milk 1 L","cost":1.1},{"name":"Butter 250 g","cost":2}],"servings":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ingredients":[{"name":"Flour 1 kg","cost":1.2},{"name":"Eggs (6)","cost":2.4},{"name":"Milk 1 L","cost":1.1},{"name":"Butter 250 g","cost":2}],"servings":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/cost-per-serving", 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
{
"ingredients": [
{
"name": "Flour 1 kg",
"cost": 1.2
},
{
"name": "Eggs (6)",
"cost": 2.4
},
{
"name": "Milk 1 L",
"cost": 1.1
},
{
"name": "Butter 250 g",
"cost": 2
}
],
"servings": 4
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.cost_per_serving",
"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
min_ingredients | 1 |
max_ingredients | 200 |
max_abs | 1000000000000 |
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. |
Notes techniques
Quand le nombre de parts est zéro, la division est indéfinie, donc l’API renvoie une erreur claire invalid_input au lieu d’inventer l’infini ou un repas gratuit absurde. Le chemin est une arithmétique purement déterministe —sans scraper d’épicerie, sans réseau, sans graine aléatoire, sans horloge— de sorte que l’exécuteur gratuit du navigateur et l’API prépayée renvoient le même JSON après l’arrondi décimal fixe à chaque appel.
Comment appeler l’API et ce qu’elle renvoie
Envoyez un corps JSON avec deux champs obligatoires. ingredients (alias costs, items, list) est un tableau d’au moins une et au plus deux cents entrées. Chaque entrée peut être un nombre fini non négatif traité comme coût, ou un objet avec cost (alias price, amount, value) et un name optionnel (alias label, title, ingredient). servings (alias portions, people, yield, serves) est un nombre fini strictement supérieur à zéro. Les valeurs absolues des coûts et des parts doivent rester dans un billion afin que sommes et quotients intermédiaires restent finis en double précision IEEE sur le Worker et dans le navigateur. En cas de succès la réponse fixe ingredient_count au nombre de lignes additionnées, ingredients à un tableau d’objets avec index, name et cost arrondi, servings au rendement arrondi, total_cost à la somme de tous les coûts, cost_per_serving à total_cost divisé par servings, formula à la chaîne cost_per_serving equals total_cost over servings, message à un court résumé et steps à un tableau ordonné de lignes de substitution. Une validation échouée —ingredients manquant, liste vide, nombres non finis, valeurs hors limites absolues, coûts négatifs, ou servings nul ou non positif— renvoie invalid_input et n’est jamais facturée. Le tarif est un $0.002 fixe par requête réussie avec unité item et prix unitaire marginal zéro.
Conseils pratiques, limites et recherches associées
Pour enseigner ou tester, couplez des exemples : farine 1.2, œufs 2.4, lait 1.1 et beurre 2.0 pour quatre parts donne total 6.7 et coût par portion 1.675 ; le même total pour huit parts divise par deux le coût de l’assiette ; une liste de coûts en nombres seuls fonctionne sans noms ; et servings égal à zéro démontre le chemin dur invalid_input. Les tâches en échec qui renvoient invalid_input ne consomment pas le solde prépayé, ce qui maintient les scripts exploratoires peu chers quand les apprenants mettent volontairement servings à zéro. Les vérifications aller-retour sont simples : recalculez à la main la somme des coûts et confirmez qu’elle égale total_cost, puis divisez par servings et confirmez cost_per_serving avec le même arrondi à douze décimales.
Questions techniques
Que se passe-t-il si le nombre de parts est zéro ?
La division par zéro est indéfinie. L’API renvoie invalid_input et ne facture pas la requête.