Marketplace add-ons
La marketplace permet d'activer à la volée des fonctionnalités payantes sur ton compte Kairo, en plus de ton abonnement de base. Chaque add-on est facturé mensuellement au prorata et vient s'ajouter à ta facture Stripe.
Activer un add-on (opérateur)
- Ouvre Marketplace dans la barre latérale.
- Chaque add-on affiche son nom, son prix mensuel et une description.
- Clique Activer — Kairo ajoute une ligne à ton abonnement Stripe existant, la facturation démarre immédiatement au prorata du jour.
- L'add-on apparaît ensuite dans Paramètres → Add-ons avec un bouton pour désactiver.
Désactiver arrête la facturation au prorata du jour et retire l'accès aux fonctionnalités liées.
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), utilisé dans le code par le guard@RequireMarketplaceAddon('insight'). 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 — un id foireux est rejeté immédiatement, pas au premier achat. - Publier — un add-on non publié reste invisible pour les opérateurs (utile pour préparer un lancement).
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 :
- Products → New product — nom = même que celui affiché sur Kairo.
- Ajoute un prix récurrent mensuel, devise EUR.
- Copie l'id du prix (format
price_1AbC…) et colle-le dans le champ Stripe price id de l'add-on Kairo.
Si tu changes le prix plus tard, crée un nouveau Price dans Stripe et
mets à jour le price_... sur l'add-on — les activations existantes
continuent au prix d'origine jusqu'à leur prochain renouvellement.
Sécurité
Le guard backend @RequireMarketplaceAddon('slug') protège 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.
Limites connues
- 1 seule quantité par activation. Un opérateur ne peut pas activer deux fois le même add-on.
- La désactivation retire immédiatement l'accès — pas de délai de grâce jusqu'à fin de période, à définir plus tard si besoin.