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

# Anatomie du payload — Payin

> Détail de chaque champ du payload reçu lors d'un paiement entrant. Exemple réel et explication champ par champ.

Lors d'un paiement entrant, LigdiCash envoie deux requêtes POST à votre `callback_url` — une en `application/json`, une en `application/x-www-form-urlencoded`. Les deux contiennent les mêmes données. Cette page détaille la structure JSON.

## Exemple complet

```json theme={null}
{
  "date": "2026-05-09 07:20:23+00",
  "wiki": "https://client.ligdicash.com/wiki/confirmInvoice",
  "token": "",
  "amount": 4200,
  "status": "completed",
  "montant": 4200,
  "customer": "22676275726",
  "oreference": "",
  "request_id": "P2777636082026",
  "custom_data": [
    {
      "keyof_customdata": "transaction_id",
      "valueof_customdata": "ART5A7044E5",
      "datecreation_customdata": "2026-05-09 07:20:23.362788"
    },
    {
      "keyof_customdata": "hash",
      "valueof_customdata": "f918c54d54cdc334ade09f8c228a224b1d3df646250c84dcdd99af528ddcd450",
      "datecreation_customdata": "2026-05-09 07:20:23.362788"
    },
    {
      "keyof_customdata": "logfile",
      "valueof_customdata": "2026050907202369fee03756652",
      "datecreation_customdata": "2026-05-09 07:20:23.362788"
    }
  ],
  "description": "",
  "external_id": "ART5A7044E5",
  "operator_id": "11",
  "operator_name": "ORANGE BURKINA",
  "response_code": "00",
  "response_text": "",
  "customer_details": {
    "email": "prenom.nom@example.com",
    "phone": "22676275726",
    "details": "",
    "lastname": "NOM",
    "firstname": "Prénom"
  }
}
```

## Champs principaux

<ResponseField name="date" type="string">
  Horodatage de l'événement au format `YYYY-MM-DD HH:MM:SS+TZ`.
</ResponseField>

<ResponseField name="response_code" type="string">
  Code de résultat. `"00"` = succès. Toute autre valeur indique une erreur — consultez `wiki` pour le détail.
</ResponseField>

<ResponseField name="status" type="string">
  Statut de la transaction : `"completed"`, `"pending"` ou `"notcompleted"`. Basez votre logique métier sur ce champ.
</ResponseField>

<ResponseField name="amount" type="integer">
  Montant de la transaction en XOF.
</ResponseField>

<ResponseField name="montant" type="integer">
  Identique à `amount`. Les deux champs coexistent dans toutes les réponses LigdiCash.
</ResponseField>

<ResponseField name="customer" type="string">
  Numéro de téléphone du payeur, avec indicatif pays, sans `+` ni espaces.
</ResponseField>

<ResponseField name="request_id" type="string">
  Identifiant unique de la requête généré par LigdiCash. Utilisez-le pour la déduplication lorsque `custom_data` est vide ou inaccessible.
</ResponseField>

<ResponseField name="external_id" type="string">
  Concaténation des valeurs de tous les champs de `custom_data` dont la clé contient `"id"`. Peut être fiable si vous n'avez qu'un seul champ avec `"id"` dans le nom — mais parsez `custom_data` directement pour un résultat garanti.
</ResponseField>

<ResponseField name="token" type="string">
  Toujours vide (`""`). Ce champ n'est pas utilisable pour la vérification — utilisez le token stocké à la création de la transaction.
</ResponseField>

<ResponseField name="operator_id" type="string">
  Identifiant de l'opérateur qui a traité le paiement (ex : `"11"` pour Orange Burkina).
</ResponseField>

<ResponseField name="operator_name" type="string">
  Nom de l'opérateur (ex : `"ORANGE BURKINA"`).
</ResponseField>

<ResponseField name="description" type="string">
  Description de la transaction. Peut être vide.
</ResponseField>

<ResponseField name="oreference" type="string">
  Référence opérateur. Peut être vide.
</ResponseField>

<ResponseField name="response_text" type="string">
  Libellé textuel du résultat. Peut être vide.
</ResponseField>

<ResponseField name="wiki" type="string">
  URL vers la documentation des codes d'erreur de cet endpoint. À consulter quand `response_code !== "00"`.
</ResponseField>

## Le tableau custom\_data

<ResponseField name="custom_data" type="array">
  Tableau des données personnalisées associées à la transaction. Contient vos champs marchands **plus** les champs ajoutés automatiquement par LigdiCash.

  <Expandable title="Structure d'un élément">
    <ResponseField name="keyof_customdata" type="string">
      Clé de la donnée.
    </ResponseField>

    <ResponseField name="valueof_customdata" type="string">
      Valeur de la donnée.
    </ResponseField>

    <ResponseField name="datecreation_customdata" type="string">
      Horodatage de création de la donnée.
    </ResponseField>
  </Expandable>
</ResponseField>

LigdiCash ajoute systématiquement deux entrées à votre `custom_data` :

| `keyof_customdata` | Origine   | Description                                 |
| ------------------ | --------- | ------------------------------------------- |
| `hash`             | LigdiCash | Hash de la transaction généré par LigdiCash |
| `logfile`          | LigdiCash | Référence de log interne LigdiCash          |

Filtrez toujours sur `keyof_customdata` pour extraire vos propres champs. Voir [Parser custom\_data](/api-paiement/callback/parser-custom-data).

## Les informations client

<ResponseField name="customer_details" type="object">
  Informations du payeur si disponibles.

  <Expandable title="Champs">
    <ResponseField name="firstname" type="string">Prénom.</ResponseField>
    <ResponseField name="lastname" type="string">Nom.</ResponseField>
    <ResponseField name="email" type="string">Adresse email.</ResponseField>
    <ResponseField name="phone" type="string">Numéro de téléphone.</ResponseField>
    <ResponseField name="details" type="string">Informations complémentaires. Généralement vide.</ResponseField>
  </Expandable>
</ResponseField>

## Pages associées

* [Sécurisation du callback](/api-paiement/callback/securisation)
* [Parser custom\_data](/api-paiement/callback/parser-custom-data)
* [Idempotence et déduplication](/api-paiement/callback/idempotence)
