Marketplace add-ons

La marketplace est le seul endroit où tu payes : pas d'abonnement de base, chaque add-on a son prix et s'active à la carte. Toutes les activations sont regroupées sur un abonnement Stripe unique, facturé mensuellement au prorata.

Activer un add-on (opérateur)

  1. Ouvre Marketplace dans la barre latérale.
  2. Chaque add-on affiche son nom, son prix mensuel et une description.
  3. Sur la page détail, clique Activer : tu configures les options et, pour les add-ons qui s'exécutent sur tes comptes MT5 (Signaux Telegram, Insight), tu coches les comptes concernés.
  4. Première activation → Stripe Checkout pour la carte. Ensuite, chaque add-on s'ajoute directement à ton abonnement.
  5. L'add-on apparaît dans Paramètres → Mes add-ons avec ses comptes rattachés et un bouton pour désactiver.

Désactiver arrête la facturation au prorata du jour, retire l'accès aux fonctionnalités liées et détache les comptes MT5 de l'add-on.

Comptes MT5 et slots

Un add-on lié aux comptes inclut 1 compte MT5. L'option Compte MT5 additionnel (15€/mois par compte) ajoute des slots. Tu choisis librement quels comptes occupent les slots de chaque add-on :

  • depuis la page de l'add-on (bloc Comptes MT5 : rattacher / détacher / ajouter un slot) ;
  • depuis Paramètres → Comptes MT5 (une pastille par add-on sur chaque compte) ;
  • à la création d'un compte, en cochant les add-ons qu'il doit porter.

Règles :

  • Un compte sans aucun add-on est mis en pause (déconnecté de MetaApi) — il ne coûte rien et ne trade pas. Le rattacher à un add-on le réactive.
  • Détacher un compte est refusé tant que l'add-on y a des ordres ouverts : ferme-les d'abord.
  • Réduire le nombre de comptes additionnels est refusé tant que trop de comptes sont rattachés : détache d'abord.

Gérer le catalogue (admin)

Le catalogue est administré depuis Marketplace admin. Pour chaque add-on tu renseignes :

  • Slug — identifiant technique kebab-case (ex : insight), choisi parmi ceux déclarés dans le code (ADDON_SLUGS). Une fois choisi, ne le change plus — c'est la clé stable.
  • Nom et description — affichés sur la carte de la marketplace.
  • Prix mensuel — à titre indicatif dans l'UI. Le prix réel facturé vient toujours du Price Stripe.
  • Stripe price id — l'id du prix mensuel (price_...) créé au préalable dans le dashboard Stripe. Kairo vérifie l'existence, l'état (non archivé) et le type (récurrent) du prix côté Stripe au moment de la création.
  • Options — une ligne facturée à part, avec son propre Price Stripe et son prix affiché. Pour un add-on lié aux comptes, crée l'option additional_mt5_account (kind QUANTITY) — c'est elle qui vend les slots.
  • Publier — un add-on non publié reste invisible pour les opérateurs (utile pour préparer un lancement). Dépublier annule toutes les activations en cours.

Créer le produit Stripe

Kairo ne crée jamais de produit Stripe depuis l'app — Stripe reste la source de vérité pour la tarification. Étapes côté Stripe :

  1. Products → New product — nom = même que celui affiché sur Kairo.
  2. Ajoute un prix récurrent mensuel, devise EUR.
  3. Copie l'id du prix (format price_1AbC…) et colle-le dans le champ Stripe price id de l'add-on (ou de l'option) Kairo.

Si tu changes le prix plus tard, crée un nouveau Price dans Stripe et mets à jour le price_... — les activations existantes continuent au prix d'origine jusqu'à leur prochain renouvellement.

Sécurité

Les guards backend @RequireEntitlement / @RequireAnyEntitlement protègent les endpoints liés à un add-on. Un opérateur sans activation active reçoit 402 Payment Required avec un pointeur vers /marketplace — c'est le même code partout, l'UI peut détecter et rediriger.

Les moteurs (fan-out des signaux Telegram, runner Insight) ne ciblent que les comptes rattachés à leur add-on : un compte non rattaché ne reçoit jamais d'ordre, quels que soient les autres add-ons de l'utilisateur.