# Facturation à l'usage
Source: https://docs.lomi.africa/build/billing/usage-billing

Vendre un pack d'usage prépayé, puis dépenser les unités au fil des événements.

***

title: Facturation à l'usage
description: Vendre un pack d'usage prépayé, puis dépenser les unités au fil des événements.
--------------------------------------------------------------------------------------------

import { Callout } from '@/components/docs/docs-callout';

La facturation à l'usage vend un **pack**. Le prix est ce que le client paie. Le pack est le nombre d'unités que ce paiement achète. Chaque événement dépense ces unités. Un solde trop bas refuse l'événement. Un solde faible renvoie le même pack.

<TaskSurfaces task="meter-usage" />

<Callout type="info">
  Pour la configuration produit (`product_type: usage_based`), voir **[Produits](/build/billing/products)**. La carte et le mobile money paient le pack sur le checkout hébergé.
</Callout>

## Étapes

### 1. Créer le pack

Créez un produit `product_type: usage_based`. Indiquez le prix du pack, le nombre d'unités que ce paiement achète (`included_units`) et le libellé de l'unité. lomi. crée un compteur qui additionne `quantity`. Le code du compteur est son nom.

### 2. Envoyer le checkout

Créez une session de checkout avec ce produit. Le client paie par carte, Wave ou MTN. Un paiement terminé crédite `included_units` multiplié par la quantité.

Vous pouvez d'abord inscrire le client avec `POST /usage/subscriptions`. Le solde commence à zéro, et les événements sont refusés tant qu'il n'a pas payé.

### 3. Enregistrer les événements

Envoyez l'usage au fil de l'eau. Utilisez un `transaction_id` stable par événement logique.

```bash
curl -X POST "https://sandbox.api.lomi.africa/usage/events" \
  -H "Authorization: Bearer $LOMI_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "evt_unique_123",
    "code": "api_calls",
    "customer_id": "cus_...",
    "subscription_id": "sub_...",
    "quantity": 1
  }'
```

Répond **202 Accepted**. Le traitement dépense le solde quand l'événement tient dedans.

→ [Enregistrer un événement d'usage](/api/usage/events/UsageEventsController_ingest)

### 4. Lire les unités restantes

| Objectif              | Endpoint                                                                     |
| --------------------- | ---------------------------------------------------------------------------- |
| Unités restantes      | [Solde du compteur](/api/meters/MetersController_getBalance)                 |
| Usage de l'abonnement | [Usage de l'abonnement](/api/subscriptions/SubscriptionsController_getUsage) |

`balance` est les unités encore disponibles (`credited_units` moins `consumed_units`). C'est ce nombre qui ouvre ou ferme l'accès.

## Quand le pack est épuisé

Si l'événement dépasse les unités restantes, il est enregistré en `failed` avec `insufficient_balance`. Rien n'est consommé. Renvoyez un événement après que le client a payé un autre pack.

Un événement réussi qui laisse le solde sous 20 % du dernier pack ouvre un seul rechargement pour le même pack.

* **Carte.** Si le premier pack a été payé par carte, cette carte enregistrée est débitée sans la présence du client. Un débit réussi crédite un autre pack tout de suite.
* **Wave et MTN.** Le mobile money ne peut pas être prélevé. Le client reçoit le lien de checkout du pack et le paie comme le premier pack. Un paiement terminé crédite les unités.
* Si le débit de la carte échoue, le client reçoit ce même lien.

## Rapprochement

* **Lister ou lire les événements** pour le statut de traitement : [Lister les événements](/api/usage/events/UsageEventsController_findAll), [Lire un événement](/api/usage/events/UsageEventsController_findOne).
* **Revenu** entre MRR, packs et paiements ponctuels : [Métriques de revenu](/api/usage/UsageBillingController_getRevenue).

## Voir aussi

* [Abonnements](/build/billing/subscriptions) : abonnements checkout récurrents (distincts des packs d'usage)
* [Produits](/build/billing/products) : catalogue et configuration `usage_based`
* [Vérifier les paiements](/build/reliability/verify-payments) : confirmer le paiement du pack avant de considérer les unités comme créditées
