Documentation J+SERVICES Guides Référence API

Contrat API — abonnement mensuel Suivi du Matériel

Base : https://live.jmoai.net/api/v1/clients.

Suivi du Matériel est un abonnement mensuel de surveillance, d’accès aux équipements et de maîtrise de consommation (bridage programmé, adaptatif et ciblé). Ce n’est pas une licence. L’accès est accordé uniquement après encaissement confirmé par webhook. Le palier Essentiel vaut 4 000 XOF/mois et couvre jusqu’à 10 équipements ; une offre en cours le ramène à 3 100 XOF — c’est ce montant qui est débité aujourd’hui.

La licence annuelle STARLINK X MikroTik (25 000 XOF, 12 mois) est distincte : elle donne RADIUS + VPN, la maîtrise de consommation, et inclut un mois d’Essentiel — trois mois pour un client qui possédait déjà une licence MikhmoAI Pro annuelle payée. À l’issue de cette période, l’abonnement mensuel doit rester actif pour conserver les fonctions de suivi et de maîtrise de consommation.

L’avantage cumul MikhmoAI Pro (depuis le 2026-09-01)

Un client qui possède déjà une licence MikhmoAI Pro annuelle payée et qui prend en plus STARLINK X reçoit 3 mois de Suivi du Matériel au lieu d’un : il cumule les deux produits, on lui épargne la réactivation mensuelle.

La durée retenue est écrite dans le registre — metadata.mois_offerts sur l’abonnement, et mois_offerts dans le droit suivi_pro — jamais recalculée après coup. commercial_offer vaut alors CUMUL_MIKHMOAI_PRO_STARLINK_X au lieu de STARLINK_X_MIKROTIK.

⚠️ Une licence Pro de promotion de lancement ou d’essai n’ouvre pas le cumul : seules comptent les licences réellement acquises. L’application ne doit donc pas déduire la durée de la simple présence d’une licence Pro — elle lit mois_offerts.

Le mois offert, en pratique

Il est accordé au moment où la licence est réclamée et ses droits attribués — donc juste après le paiement, sur le même parcours que la licence elle-même. Ce n’est pas un droit annuel : c’est une souscription bornée à 31 jours, visible dans GET /subscriptions/suivi-pro comme un abonnement ACTIVE ordinaire, avec metadata.included_with_license.

Pour savoir, côté application, si le gérant a la licence et l’abonnement — deux vérifications distinctes —, lire GET /clients/entitlements/bridage, décrit dans CONTRAT-API-BRIDAGE. C’est le seul appel qui répond aussi à un client qui n’a rien acheté.

Prix, offre et remises

Le prix de vente vit dans le catalogue (product_plans), jamais dans le code : c’est la même source que celle lue par la vitrine, pour que le prix AFFICHÉ et le prix DÉBITÉ ne puissent pas diverger. Chaque palier expose donc quatre montants :

Champ Sens
base_xof le prix de base du palier — 4 000 (Essentiel), 10 000 (Étendu)
offre_xof le montant de l’offre en cours, ou null s’il n’y en a pas
prix_xof le montant réellement débité — c’est celui à afficher en gros
offre_fin la date de fin de l’offre, ou null

Affichage attendu : 4 000 XOF barré, 3 100 XOF en évidence, et l’échéance de l’offre. Ne jamais recalculer le prix côté application : prix_xof fait foi.

La remise générale de 20 % sur les licences ne s’applique PAS ici, ni aucune autre réduction automatique (playbook marketing, avantage partenaire). Un abonnement mensuel amputé de 20 % l’est à chaque échéance. Seuls un coupon valide ou un code de parrainage explicite peuvent réduire le prix — et dans ce cas c’est la meilleure des deux réductions qui s’applique, jamais leur somme : un code de 500 XOF ne descend pas 3 100 à 2 600, il perd face à l’offre de 900 XOF déjà en place.

Si le palier n’est pas publié au catalogue, le checkout répond 503 SUIVI_PRO_TARIF_INDISPONIBLE plutôt que de deviner un montant. Ce n’est pas une panne de l’application : c’est une offre qui n’est pas encore ouverte à la vente.

Lire l’état

GET /subscriptions/suivi-pro retourne les paliers, le quota réellement appliqué, la licence porteuse et subscription : NONE, PENDING_BILLING_SETUP, PENDING_PAYMENT, ACTIVE, PAST_DUE, GRACE_PERIOD, CANCEL_AT_PERIOD_END, CANCELLED ou SUSPENDED.

Souscrire

POST /subscriptions/suivi-pro avec { "plan_code":"suivi-pro-essentiel" } est une prévisualisation sûre. Pour demander une souscription facturable, envoyer { "plan_code":"…", "confirm":true }. Les réponses PENDING_BILLING_SETUP ou PENDING_PAYMENT ne donnent encore aucun droit : le paiement doit être confirmé côté serveur.

Payer

GET /subscriptions/suivi-pro/payment-methods?plan_code=… retourne les moyens proposés par le Hub pour ce palier. POST /subscriptions/suivi-pro/checkout avec { "plan_code":"…", "provider":"fedapay|geniuspay", "confirm":true }

⚠️ FedaPay et GeniusPay seulement pour l’abonnement mensuel (décision du 30/08/2026). N’affichez pas de choix Chario : le serveur le refuserait par 400 SUIVI_PRO_PAYMENT_PROVIDER_UNAVAILABLE. La liste qui fait foi est celle de GET /subscriptions/suivi-pro/payment-methods — construisez les boutons à partir d’elle, jamais d’une liste écrite en dur. retourne payment_url, payment_transaction_id et subscription_id. Le prix est calculé côté serveur ; l’application ne transmet ni montant, ni identifiant client. Un second appel réutilise l’URL non payée lorsqu’elle existe. En cas d’état externe incertain, l’API renvoie 409 ou 502 SUIVI_PRO_CHECKOUT_PENDING_RECONCILIATION : l’application ne doit pas relancer automatiquement le débit.

promo_code est optionnel. Suivi Pro exclut toutes les remises automatiques, notamment la réduction générale de 20 %. Seuls un coupon valide ou un code de parrainage/revendeur explicite peuvent réduire le prix. Avec un code, Chario n’est pas proposé tant que son checkout externe ne sait pas appliquer ce même coupon.

La réconciliation FedaPay ↔ facture Lago est active depuis le 30/08/2026 : le facturier émet le même montant que celui encaissé (3 100 XOF) et la facture est réglée à la confirmation du paiement. Si elle venait à être refermée, le serveur répondrait 503 SUIVI_PRO_PAYMENT_RECONCILIATION_UNAVAILABLE sans créer aucune transaction — ce n’est pas une panne de l’application, c’est la vente qui est suspendue.

Résilier

DELETE /subscriptions/suivi-pro arrête d’abord la facturation. Si cette confirmation échoue, le service reste actif et l’API refuse la résiliation plutôt que de couper un client qui pourrait encore être facturé.

Garanties