Skip to Content
Référence APITransactions (historique)

Transactions (API historique)

La création de transactions est réservée à l’environnement de test. Avec une clé live, POST /v1/transactions répond 503 LEGACY_LIVE_TRANSACTION_DISABLED. Pour encaisser en production, utilisez les Payment Sessions ou le Hosted Checkout.

L’API Transactions reste utile pour tester vos traitements : en sandbox, elle simule une issue selon le numéro de téléphone, sans paiement réel. La lecture et la liste restent disponibles pour consulter l’historique.

Tous les endpoints utilisent X-API-Key. Portées : write_transactions pour créer, read_transactions pour lire.

Initier une transaction

POST/v1/transactionsTest uniquementX-API-Key
ChampTypeRequisDescription
referencestringOuiRéférence unique côté marchand (100 caractères max)
amountintegerOuiMontant entier en XAF
currencystringOuiXAF
operatorstringOuiAIRTEL ou MOOV
phone_numberstringOuiNuméro du payeur (20 caractères max)
descriptionstringNonDescription courte (255 caractères max)
curl -X POST https://api.kadryza.app/v1/transactions \ -H "X-API-Key: $KADRYZA_TEST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "reference": "order_2026_001", "amount": 5000, "currency": "XAF", "operator": "AIRTEL", "phone_number": "+23566000000", "description": "Commande #2026-001" }'
201 Created
{ "id": "f72807b8-01c9-4283-aa1d-0d6809bf5176", "internal_ref": "KADRYZA-20260605-20113722", "status": "PENDING", "is_test": true, "environment": "test", "expires_at": "2026-06-05T12:05:00Z" }

Idempotence : réutiliser la même reference dans le même environnement renvoie la transaction existante, sans en créer une seconde.

Simulation sandbox

Avec une clé de test, aucune opération réelle n’a lieu. Environ deux secondes après la création :

phone_number contientIssueWebhook
0001FAILEDtransaction.failed
0002reste PENDING puis TIMEOUT à expires_attransaction.timeout
autre choseSUCCESStransaction.success

Statuts

PENDING, PROCESSING, WAITING_SMS (intermédiaires) ; SUCCESS, FAILED, TIMEOUT (finaux) ; REFUNDED (après remboursement depuis le dashboard).

Récupérer une transaction

GET/v1/transactions/:idX-API-Key
curl https://api.kadryza.app/v1/transactions/f72807b8-01c9-4283-aa1d-0d6809bf5176 \ -H "X-API-Key: $KADRYZA_TEST_API_KEY"
200 OK
{ "id": "f72807b8-01c9-4283-aa1d-0d6809bf5176", "merchant_id": "fb44caba-6f14-46e7-af28-abd8ed41de81", "reference": "order_2026_001", "internal_ref": "KADRYZA-20260605-20113722", "amount": 5000, "currency": "XAF", "operator": "AIRTEL", "phone_number": "+23566000000", "description": "Commande #2026-001", "status": "SUCCESS", "is_test": true, "environment": "test", "webhook_sent": false, "webhook_attempts": 0, "initiated_at": "2026-06-05T12:00:00Z", "confirmed_at": "2026-06-05T12:00:02Z", "expires_at": "2026-06-05T12:05:00Z", "created_at": "2026-06-05T12:00:00Z", "updated_at": "2026-06-05T12:00:02Z" }

Lister les transactions

GET/v1/transactionsX-API-Key
ParamètreTypeDescription
limitintegerDéfaut 20, maximum 1000
offsetintegerDéfaut 0
statusstringUn des statuts ci-dessus
operatorstringAIRTEL ou MOOV
date_from, date_tostringAAAA-MM-JJ ou RFC 3339
searchstringRecherche textuelle (référence…)

L’environnement est celui de la clé : une clé de test ne liste que des transactions de test.

curl "https://api.kadryza.app/v1/transactions?limit=50&status=SUCCESS&operator=AIRTEL&date_from=2026-06-01" \ -H "X-API-Key: $KADRYZA_TEST_API_KEY"

Réponse : { "transactions": [...], "total": 1, "limit": 50, "offset": 0 }.

SDK

const created = await kadryza.transactions.initiate({ reference: 'order_2026_001', amount: 5000, currency: 'XAF', operator: 'AIRTEL', phone_number: '+23566000000' }) const tx = await kadryza.transactions.get(created.id) const page = await kadryza.transactions.list({ limit: 20, status: 'SUCCESS' })

Erreurs spécifiques

HTTPcodeCause
400INVALID_BODY, VALIDATION_ERRORCorps illisible ou champ invalide
400TRANSACTION_AMOUNT_TOO_LOW, TRANSACTION_AMOUNT_TOO_HIGHMontant hors des bornes du compte
400INVALID_STATUS, INVALID_OPERATOR, INVALID_DATE_FROM, INVALID_DATE_TO, INVALID_DATE_RANGE, INVALID_SEARCHFiltre de liste invalide
403DAILY_TRANSACTION_LIMIT_EXCEEDEDPlafond journalier atteint
404NOT_FOUNDTransaction inconnue pour ce compte et cet environnement
409DUPLICATE_REFERENCECréation concurrente avec la même référence
503LEGACY_LIVE_TRANSACTION_DISABLEDCréation avec une clé live

Erreurs communes : Codes d’erreur.