Documentation / Concepts / Crédits

Crédits & facturation

Les crédits sont la monnaie d'utilisation de l'API. Chaque appel coûte un nombre fixe de crédits, débité avant l'exécution de la requête.

Cycle de vie des crédits

  1. Création du premier token : 500 crédits gratuits sont attribués une seule fois, au moment de la première création de token.
  2. Recharge mensuelle (plan gratuit) : le 1er de chaque mois à minuit UTC, 500 crédits sont automatiquement ajoutés à tous les tokens gratuits actifs.
  3. Achat de crédits : les packs unitaires sont crédités immédiatement après le paiement Stripe.
  4. Plans par abonnement : les crédits mensuels sont ajoutés à la réception de l'événement invoice.payment_succeeded Stripe — pas à la validation du checkout.
  5. Rotation de token : créer un nouveau token révoque l'ancien et transfère le solde existant. Vous ne recevez pas un nouveau lot de 500 crédits.

Déduction avant exécution

Les crédits sont déduits avant l'exécution de chaque requête. Si votre solde est insuffisant, la requête est bloquée avec HTTP 402 (REST) ou un message d'erreur dans content[0].text (MCP).

Vérifiez votre solde en amont
Sur les appels coûteux (20 crédits pour get_property_history), assurez-vous d'avoir un solde suffisant avant d'enchaîner plusieurs requêtes. Le champ _credits.remaining est inclus dans chaque réponse réussie.

Remboursement automatique

Si une requête échoue après déduction (erreur DB, timeout, 404), les crédits sont remboursés automatiquement. Cas de remboursement :

  • Timeout ou erreur SQL inattendue
  • GET /v1/transactions/:id — 404 transaction introuvable
  • GET /v1/businesses/:siren — 404 SIRET introuvable

Indicateur de solde bas

Lorsque votre solde descend sous les 20 crédits, un champ note apparaît dans _credits :

"_credits": {
  "used": 5,
  "remaining": 12,
  "note": "Low credits! Recharge at normi.fr/dashboard/credits"
}

Coûts par outil

Outil MCP / Endpoint RESTCrédits
search_properties / GET /v1/transactions5 cr.
get_market_stats / GET /v1/stats/market5 cr.
GET /v1/transactions/:id2 cr.
GET /v1/businesses/:siren2 cr.
search_businesses / GET /v1/businesses/search5 cr.
get_building_context / GET /v1/transactions/:id/bdnb2 cr.
GET /v1/transactions/:id/dpe2 cr.
GET /v1/bdnb/stats5 cr.
find_comparables / GET /v1/comparables10 cr.
estimate_property / GET /v1/estimate10 cr.
get_price_trends / GET /v1/stats/trends10 cr.
compare_neighborhoods / GET /v1/stats/compare10 cr.
get_market_activity / GET /v1/market-activity10 cr.
get_market_score / GET /v1/market-score10 cr.
get_dpe_stats / GET /v1/dpe/stats10 cr.
get_dpe_premium / GET /v1/stats/dpe-premium10 cr.
dpe_market_analysis / GET /v1/dpe/prix-par-classe10 cr.
GET /v1/dpe/passoires-thermiques10 cr.
GET /v1/dpe/evolution-prime-verte10 cr.
get_age_adjusted_stats / GET /v1/bdnb/age-stats10 cr.
get_renovation_score / GET /v1/bdnb/renovation-score10 cr.
get_market_heatmap / GET /v1/heatmap15 cr.
get_property_history / GET /v1/property-history20 cr.
portfolio_add (Maison/Appartement)10 cr.
portfolio_add (autre type)2 cr.
portfolio_list / portfolio_get / portfolio_update / portfolio_deletegratuit
alert_create / alert_list / alert_update / alert_deletegratuit
Optimiser la consommation
Utilisez summary_only=true sur search_properties pour économiser la largeur de bande contexte sans réduire le coût en crédits. Chaînez les appels MCP intelligemment : un appel get_market_stats (5 cr.) avant un find_comparables (10 cr.) évite souvent d'appeler get_property_history (20 cr.).