> ## 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.

# Parser custom_data dans le callback

> Comment extraire votre transaction_id depuis custom_data et pourquoi external_id est le raccourci recommandé.

Le champ `custom_data` dans le callback est un tableau d'objets. Chaque entrée correspond à un champ que vous avez passé à la création de la transaction. LigdiCash y ajoute automatiquement ses propres champs — filtrez toujours par `keyof_customdata` pour extraire les vôtres.

## Structure de custom\_data

```json theme={null}
"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"
  }
]
```

LigdiCash ajoute systématiquement `hash` et `logfile` à votre tableau. Ne vous appuyez pas sur l'index ou l'ordre des entrées — filtrez toujours par `keyof_customdata`.

## Extraire votre transaction\_id

```javascript theme={null}
function getCustomValue(customData, key) {
  const entry = customData.find(e => e.keyof_customdata === key);
  return entry ? entry.valueof_customdata : null;
}

const transactionId = getCustomValue(payload.custom_data, 'transaction_id');
```

```php theme={null}
function getCustomValue(array $customData, string $key): ?string {
    foreach ($customData as $entry) {
        if ($entry['keyof_customdata'] === $key) {
            return $entry['valueof_customdata'];
        }
    }
    return null;
}

$transactionId = getCustomValue($payload['custom_data'], 'transaction_id');
```

## Le champ external\_id

`external_id` est une concaténation des valeurs de tous les champs de `custom_data` dont la clé contient `"id"`. Si votre `custom_data` ne contient qu'un seul champ avec `"id"` dans le nom (ex : `transaction_id`), `external_id` correspondra à sa valeur. Mais si plusieurs clés contiennent `"id"`, leurs valeurs seront concaténées — ce qui le rend peu fiable pour identifier la transaction.

<Warning>
  Ne vous fiez pas à `external_id` comme identifiant unique. Parsez toujours `custom_data` directement avec `keyof_customdata` pour extraire votre `transaction_id` de manière fiable.
</Warning>

## Pages associées

* [Payload Payin](/api-paiement/callback/payload-payin)
* [Sécurisation du callback](/api-paiement/callback/securisation)
* [Le pattern transaction\_id](/concepts/transaction-id-pattern)
