Webhooks
Configurez des points de terminaison webhook pour recevoir des événements en temps réel.
Les webhooks permettent à votre application de recevoir des notifications en temps réel sur ce qui se passe dans votre compte lomi. : paiements réussis, renouvellements d’abonnement, transactions en échec, etc. Au lieu d’interroger l’API en boucle, vous configurez une URL où lomi. enverra les données d’événement via des requêtes HTTP `POST`.
URL de base
https://api.lomi.africaAuthentification
Les requêtes d’API qui gèrent les webhooks exigent une clé API dans l’en-tête `X-API-Key`. Voir Authentification.
X-API-Key: your_api_keySécurité des webhooks
Pour garantir l’authenticité et l’intégrité des événements, lomi. signe chaque requête envoyée vers votre point de terminaison avec un secret propre à ce webhook.
- En-tête de signature : chaque requête inclut l’en-tête HTTP
`X-Lomi-Signature`. - Secret webhook : à la création d’un webhook via l’API, un
`secret`(préfixe`whsec_`) est renvoyé. Conservez ce secret en lieu sûr : il ne sera plus affiché. - Vérification : votre point de terminaison doit recalculer un hachage
`HMAC-SHA256`du corps brut de la requête avec ce secret et le comparer à la valeur de l’en-tête.
Voir le guide Vérification de signature des webhooks pour des exemples d’implémentation.
Événements webhook
Lors de la création ou de la mise à jour d’un webhook, vous souscrivez à des types d’événements précis. lomi. n’envoie que ceux auxquels vous êtes abonné.
| Énumération d’événement | Description | Type de charge data |
|---|---|---|
`PAYMENT_CREATED` | Une nouvelle tentative de paiement est lancée. | `Transaction` |
`PAYMENT_SUCCEEDED` | Un paiement ponctuel réussit. | `Transaction` |
`PAYMENT_FAILED` | Une tentative de paiement ponctuel échoue. | `Transaction` |
`SUBSCRIPTION_CREATED` | Un abonnement est créé. | `Subscription` |
`SUBSCRIPTION_RENEWED` | Un abonnement est renouvelé avec succès. | `Subscription` |
`SUBSCRIPTION_CANCELED` | Un abonnement est annulé. | `Subscription` |
`REFUND_COMPLETED` | Un remboursement est traité avec succès. | `Refund` |
`REFUND_FAILED` | Une tentative de remboursement échoue. | `Refund` |
`REFUND_CREATED` | Une tentative de remboursement est créée. | `Refund` |
`test.webhook` | Événement de test envoyé via l’API. | `TestPayload` |
(La structure précise des charges par type sera documentée sur la ressource concernée — Transactions, Abonnements, etc.)
Les abonnements et les corps JSON utilisent des noms d’événement en SCREAMING_SNAKE_CASE (par ex. PAYMENT_SUCCEEDED). Certains outils peuvent afficher des alias avec points (par ex. payment.succeeded) — utilisez les valeurs ci-dessus pour configurer vos points de terminaison et comparer le champ event.
Pour le comportement opérationnel (nouvelles tentatives, idempotence, journaux), voir Fiabilité des webhooks.
Points de terminaison de l’API
Lister les webhooks
Récupère la liste des webhooks configurés pour votre organisation.
Point de terminaison : `GET /webhooks`
Exemple de réponse (200 OK) :
{
"data": [
{
"id": "wh_a1b2c3d4e5f6",
"organization_id": "org_f6e5d4c3b2a1",
"url": "https://example.com/webhook-receiver",
"events": ["PAYMENT_SUCCEEDED", "SUBSCRIPTION_RENEWED"],
"active": true,
"created_at": "2025-04-06T12:00:00.000Z",
"updated_at": "2025-04-06T12:00:00.000Z",
"description": "Primary production webhook"
}
]
}Créer un webhook
Crée un nouveau point de terminaison webhook.
Point de terminaison : `POST /webhooks`
Corps de la requête :
{
"url": "https://example.com/new-webhook-receiver",
"authorized_events": ["PAYMENT_SUCCEEDED", "PAYMENT_FAILED"],
"description": "Webhook for payment events"
}`url`(`string`, obligatoire) : URL HTTPS du point de terminaison.`authorized_events`(`array of strings`, obligatoire) : liste des types d’événements (voir Événements webhook).`description`(`string`, facultatif) : libellé descriptif.
Exemple de réponse (201 Created) :
{
"data": {
"id": "wh_new1b2c3d4e5f6",
"organization_id": "org_f6e5d4c3b2a1",
"url": "https://example.com/new-webhook-receiver",
"events": ["PAYMENT_SUCCEEDED", "PAYMENT_FAILED"],
"active": true,
"created_at": "2025-04-06T14:00:00.000Z",
"updated_at": "2025-04-06T14:00:00.000Z",
"description": "Webhook for payment events"
},
"secret": "whsec_abc123def456..."
}Obtenir un webhook
Récupère le détail d’un webhook.
Point de terminaison : `GET /webhooks/{id}`
Paramètres de chemin :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
`id` | `string` | Oui | ID du webhook (`wh_...`) |
Exemple de réponse (200 OK) :
{
"data": {
"id": "wh_a1b2c3d4e5f6",
"description": "Updated description"
}
}Mettre à jour un webhook
Met à jour un webhook existant.
Point de terminaison : `PATCH /webhooks/{id}`
Paramètres de chemin :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
`id` | `string` | Oui | ID du webhook (`wh_...`) |
Corps de requête (champs à mettre à jour uniquement) :
{
"url": "https://example.com/updated-webhook-receiver",
"authorized_events": ["PAYMENT_SUCCEEDED"],
"is_active": false,
"description": "Updated description"
}Supprimer un webhook
Supprime un webhook.
Point de terminaison : `DELETE /webhooks/{id}`
Réponse exemple (204 No Content) : aucun corps.
Tester les webhooks
Vous pouvez tester les webhooks via l’API ou `curl.
Créer un webhook de test
Créez d’abord un point de terminaison vers un récepteur de test (par ex. Webhook.site ou tunnel local ngrok).
curl -X POST "https://api.lomi.africa/webhooks" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"url": "YOUR_TEST_WEBHOOK_URL",
"authorized_events": ["PAYMENT_SUCCEEDED", "test.webhook"],
"description": "Test Endpoint"
}'Notez `id` et `secret` dans la réponse.
Envoyer un événement de test
Utilisez `POST /webhooks/{id}/test` pour envoyer un événement `test.webhook`.
curl -X POST "https://api.lomi.africa/webhooks/YOUR_WEBHOOK_ID/test" \
-H "X-API-Key: YOUR_API_KEY"Vérifiez sur le récepteur de test et validez la signature avec le secret stocké.
Journaux de livraison et nouvelles tentatives
lomi. journalise chaque tentative et expose des endpoints pour consulter les journaux et relancer manuellement les échecs.
Obtenir les journaux de livraison
Point de terminaison : `GET /webhooks/{id}/logs`
| Paramètre | Type | Description |
|---|---|---|
`limit` | `integer` | Nombre de lignes (max 100) |
`offset` | `integer` | Pagination |
`success` | `boolean` | Filtrer les livraisons réussies |
`failed` | `boolean` | Filtrer les échecs |
Relancer une livraison
Point de terminaison : `POST /webhooks/{webhook_id}/logs/{log_id}/retry`
Nouvelles tentatives automatiques : lomi. relance automatiquement les livraisons en échec avec un recul exponentiel pendant environ six heures avant de marquer un échec définitif.
Bonnes pratiques
- Vérifier les signatures : vérifiez toujours
`X-Lomi-Signature. - Répondre vite : renvoyez un statut
`2xx`en quelques secondes ; déportez le travail long en arrière-plan. - Anticiper les relances : lomi peut renvoyer un événement si votre endpoint échoue ou dépasse le délai.
- Idempotence : le traitement doit tolérer les doublons.
- Protéger le secret : stockez-le via variables d’environnement ou gestionnaire de secrets.