> ## Documentation Index
> Fetch the complete documentation index at: https://docs.djonanko.ci/llms.txt
> Use this file to discover all available pages before exploring further.

# Notification d'opération

> Requête que **Djonanko envoie à votre serveur** dès qu'une opération atteint un
état définitif, ou qu'un encaissement attend une action du payeur.

L'URL est celle configurée sur votre compte (`webhookUrl`), ou celle fournie
dans `callbackUrl` à la création de l'opération.

### Vérifier la signature

Deux en-têtes accompagnent chaque notification :

```
Djonanko-Signature: t=1759226027,v1=3a7f…
Djonanko-Event:     cashin.succeeded
```

`v1` est un HMAC-SHA256 de la chaîne `<t>.<corps brut>`, calculé avec votre
secret de signature. **Vérifiez-le sur le corps brut**, avant toute
désérialisation : recalculer après avoir reparsé le JSON produit une chaîne
différente et la vérification échouerait systématiquement.

Comparez aussi `t` à l'heure courante et refusez au-delà de 5 minutes : c'est
ce qui rend une notification capturée inexploitable.

### Ce que votre endpoint doit faire

1. **Répondre 2xx en moins de 15 secondes.** Accusez réception, traitez ensuite
   en tâche de fond.
2. **Être idempotent.** La livraison est garantie « au moins une fois » :
   dédupliquez sur `id`.
3. **Être joignable en HTTPS.**

### En cas d'indisponibilité

3 tentatives immédiates (2 s, 4 s, 8 s), puis des rejeux à 5 min, 15 min, 1 h,
6 h et 24 h — un rattrapage sur environ 31 heures.

Les codes `400`, `401`, `404`, `410` et `422` font abandonner immédiatement :
ils ne se résoudront pas d'eux-mêmes. Un `403` est au contraire réessayé,
parce que c'est typiquement un pare-feu applicatif devant votre serveur, que
vous pouvez débloquer.

<Warning>
Les notifications ne sont pas la source de vérité. Si l'une vous échappe,
`GET /operations/{reference}` donne toujours l'état réel. N'attendez jamais
une notification indéfiniment : interrogez.
</Warning>


<Warning>
  Vérifiez la signature `Djonanko-Signature` **sur le corps brut**, avant toute désérialisation : si vous reparsez le JSON puis le ré-sérialisez pour calculer le HMAC, la vérification échouera systématiquement.

  Code de vérification en JavaScript, Python et PHP : [Webhooks](/guichet/webhooks#verifier-la-signature).
</Warning>


## OpenAPI

````yaml webhook operationNotification
openapi: 3.1.0
info:
  title: Djonanko Guichet API
  version: 1.0.0
  description: >
    API d'agrégation mobile money de Djonanko. Elle permet à une entreprise

    partenaire d'**encaisser** (`cash-in`) et de **transférer** (`cash-out`) sur
    les

    réseaux mobile money d'Afrique de l'Ouest et du Centre, directement depuis
    ses

    propres serveurs.


    Contrairement à l'API Djonanko Pay, le Guichet ne passe **ni par un lien de

    paiement ni par une page hébergée** : vous appelez l'API, le client est
    sollicité

    sur son téléphone, et vous recevez l'issue par notification signée.


    ### Ce qu'il faut retenir avant de commencer


    - **Authentification** : `x-api-key` + `x-api-secret` sur chaque appel.

    - **Montants entiers** : le XOF, le XAF et le GNF n'ont pas de sous-unité.
      `5000` vaut 5 000 FCFA. Aucune décimale n'est acceptée.
    - **Idempotence obligatoire** : l'en-tête `Idempotency-Key` est exigé sur
      `POST /cashin` et `POST /cashout`.
    - **Un portefeuille unique** par compte : les encaissements le créditent,
    les
      transferts le débitent.
    - **Notifications signées** : vérifiez l'en-tête `Djonanko-Signature` avant
    de
      traiter.

    Toutes les réponses sont en JSON. Chaque réponse porte un en-tête

    `x-request-id` à citer dans vos demandes de support.
  contact:
    name: Support Djonanko
    url: https://www.djonanko.ci/#contact
servers:
  - url: https://guichet.apidjonanko.tech/v1
    description: Production
security:
  - ApiKey: []
    ApiSecret: []
tags:
  - name: Encaissement
    description: Débiter un compte mobile money vers votre portefeuille.
  - name: Transfert
    description: Créditer un compte mobile money depuis votre portefeuille.
  - name: Opérations
    description: Consulter l'état et l'historique de vos opérations.
  - name: Portefeuille
    description: Solde et relevé des mouvements.
  - name: Compte
    description: Création de compte, profil, clés d'API.
  - name: Sécurité
    description: Adresses IP autorisées.
  - name: Notifications
    description: Configuration, supervision et rejeu des notifications sortantes.
paths: {}
components:
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Votre clé publique, préfixée `gk_live_` (ou `gk_test_`).
    ApiSecret:
      type: apiKey
      in: header
      name: x-api-secret
      description: >
        Votre secret, préfixé `gs_live_` (ou `gs_test_`). Affiché une seule
        fois, à l'émission de la clé. Il ne doit jamais quitter vos serveurs.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.