lomi.

Abonnements

Gérez les abonnements clients récurrents.

L’API Subscriptions permet de lister et récupérer des instances d’abonnement (un client sur un plan récurrent). Elles sont en général créées lorsque des clients souscrivent à un produit récurrent via une session ou un lien de paiement.

Détail d’abonnement à remplacer

Les SDK peuvent exposer à la fois des helpers /subscriptions et des méthodes /customer-subscriptions. Exemples par route et transitions de statut : Abonnements. Les champs immuables et les règles d’annulation suivent les descriptions OpenAPI de chaque opération.

Pour les parcours d’inscription (essais, types de premier paiement, montants de session), voir Comportement du tunnel — Abonnements.

Lister les abonnements

Récupère tous les abonnements de votre organisation.

Paramètres de requête

ParamètreTypeDescription
pagenumberPage (défaut : 1)
pageSizenumberTaille de page (défaut : 50)
import { LomiSDK } from '@lomi./sdk';

const lomi = new LomiSDK({
  apiKey: process.env.LOMI_API_KEY!,
  environment: 'live',
});

const subscriptions = await lomi.subscriptions.list({
  page: 1,
  pageSize: 20,
});

subscriptions.forEach(sub => {
  console.log(`${sub.id}: ${sub.status} - ${sub.amount} ${sub.currency_code}`);
});
from lomi import LomiClient
import os

client = LomiClient(
    api_key=os.environ["LOMI_API_KEY"],
    environment="test"
)

subscriptions = client.subscriptions.list(page=1, pageSize=20)

for sub in subscriptions:
    print(f"{sub['id']}: {sub['status']}")
curl -X GET "https://api.lomi.africa/subscriptions?page=1&pageSize=20" \
  -H "X-API-KEY: $LOMI_API_KEY"

Abonnements d’un client

Récupère les abonnements d’un client donné.

const customerSubs = await lomi.subscriptions.findByCustomer('cus_abc123...');
customer_subs = client.subscriptions.get_by_customer('cus_abc123...')
curl -X GET "https://api.lomi.africa/subscriptions/customer/cus_abc123..." \
  -H "X-API-KEY: $LOMI_API_KEY"

Obtenir un abonnement

Récupère le détail d’un abonnement.

const subscription = await lomi.subscriptions.get('sub_abc123...');
console.log(`Status: ${subscription.status}`);
console.log(`Next billing: ${subscription.current_period_end}`);
subscription = client.subscriptions.get('sub_abc123...')
print(f"Status: {subscription['status']}")
curl -X GET "https://api.lomi.africa/subscriptions/sub_abc123..." \
  -H "X-API-KEY: $LOMI_API_KEY"

Cycle de vie d’un abonnement

Les abonnements sont créés lorsqu’un client finalise le tunnel pour un produit récurrent (tunnel hébergé, lien de paiement, vitrine ou session API avec product_type: recurring). Statuts typiques :

StatutSignification
pendingCréé mais pas encore actif (rare à l’inscription).
trialEssai gratuit en cours ; pas de prélèvement avant la fin de l’essai.
activePayant et renouvelé selon l’échéance.
past_dueÉchec de renouvellement ; nouvelles tentatives ou action marchande.
pausedFacturation en pause (p. ex. après échec si le produit est configuré pour pauser).
cancelledAnnulé par le marchand ou le client.
expiredDurée fixe terminée ou essai converti sans moyen de paiement.

Le premier paiement est défini sur le produit via first_payment_type :

ValeurPremier prélèvement au tunnel
initialTarif récurrent complet (ou montant au prorata selon les règles).
non_initial0 à l’inscription ; premier prélèvement à la première échéance.
proratedMontant partiel pour le reste de la période en cours.

Essais (trial_enabled + trial_period_days) : montant à l’inscription 0. le processeur carte enregistre la carte pour la facturation ultérieure ; le mobile money peut finaliser sans paiement immédiat. Après l’essai, le statut passe à active et la facturation démarre à next_billing_date.

Renouvellements automatiques avec moyen carte enregistré. Sans moyen (fréquent en mobile money), lomi. peut basculer vers un lien de renouvellement manuel pour le client.


Annuler un abonnement

Annule un abonnement actif. C’est la seule modification permise.

Corps de la requête

ChampTypeObligatoireDescription
cancel_at_period_endbooleanNonSi true, annulation fin de période. Si false, annulation immédiate (défaut).
reasonstringNonMotif d’annulation
const cancelled = await lomi.subscriptions.cancel('sub_abc123...');

const scheduledCancel = await lomi.subscriptions.cancel('sub_abc123...', {
  cancel_at_period_end: true,
  reason: 'Customer requested cancellation',
});

console.log(`Subscription will cancel at: ${scheduledCancel.cancel_at}`);
cancelled = client.subscriptions.cancel('sub_abc123...')

scheduled_cancel = client.subscriptions.cancel('sub_abc123...', {
    "cancel_at_period_end": True,
    "reason": "Customer requested cancellation"
})
curl -X POST "https://api.lomi.africa/subscriptions/sub_abc123.../cancel" \
  -H "X-API-KEY: $LOMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "cancel_at_period_end": true,
    "reason": "Customer requested cancellation"
  }'

Objet Subscription

ChampTypeDescription
idstringIdentifiant unique
customer_idstringClient
product_idstringProduit
price_idstringTarif
statusstringpending, trial, active, past_due, paused, cancelled, expired
amountnumberMontant récurrent
currency_codestringDevise
billing_intervalstringday, week, month, year
next_billing_datestringProchaine date de prélèvement (ISO 8601)
start_datestringDébut de l’abonnement
end_datestringFin pour durée fixe ou essai (nullable)
cancel_at_period_endbooleanAnnulation planifiée en fin de période
cancel_atstringDate d’annulation planifiée
cancelled_atstringAnnulation effective
created_atstringCréation
updated_atstringDernière mise à jour

Les réponses API peuvent utiliser subscription_id plutôt que id. Voir Abonnements pour la forme de liste canonique.


Webhooks

Abonnez-vous à ces événements en SCREAMING_SNAKE_CASE (comme sur Webhooks) :

ÉvénementDescription
SUBSCRIPTION_CREATEDNouvel abonnement après inscription réussie (y compris essai).
SUBSCRIPTION_RENEWEDCycle de facturation renouvelé avec succès.
SUBSCRIPTION_CANCELLEDAbonnement annulé.

Les échecs de paiement au renouvellement n’émettent pas de webhook abonnement dédié. Écoutez PAYMENT_FAILED sur la transaction du renouvellement et surveillez le status (past_due, paused, etc.) via l’API.

L’enregistrement de carte en essai (setup_intent.succeeded) est interne ; SUBSCRIPTION_CREATED est émis à la fin de l’inscription, pas au chargement du formulaire carte.

Notifications client : les inscriptions en essai ou à 0 € (sans transaction de paiement complétée) déclenchent un e-mail de confirmation d’inscription si customer_notifications.subscription_signups.email est activé (par défaut : oui). Les inscriptions avec premier paiement reçoivent le reçu de transaction standard.


Réponses d’erreur

StatutDescription
401Clé API invalide ou manquante
404Abonnement ou client introuvable

Sur cette page