Skip to Content
SDK Node.jsRéférence complète

Référence SDK

new Kadryza(config)

import Kadryza from '@kadryza/sdk' const kadryza = new Kadryza({ apiKey: process.env.KADRYZA_API_KEY!, baseUrl: 'https://api.kadryza.app', timeout: 30000 })
ParamètreTypeRequisDéfaut
apiKeystringOui-
baseUrlstringNonhttps://api.kadryza.app
timeoutnumberNon30000

Le client HTTP utilise X-API-Key pour l’API publique.

transactions.initiate(params)

API historique : test uniquement. Avec une clé live, l’API répond 503 LEGACY_LIVE_TRANSACTION_DISABLED (levée comme KadryzaGatewayUnavailableError). Pour la production, utilisez paymentSessions.create.

const response = await kadryza.transactions.initiate({ reference: 'order_2026_001', amount: 5000, currency: 'XAF', operator: 'AIRTEL', phone_number: '+23566000000', description: 'Commande #2026-001' })

Retour :

interface InitiateTransactionResponse { id: string internal_ref: string status: TransactionStatus is_test: boolean environment: 'live' | 'test' expires_at: string }

transactions.get(id)

const transaction = await kadryza.transactions.get('a1b2c3d4-e5f6-7890-abcd-ef1234567890')

Retour principal :

interface Transaction { id: string reference: string internal_ref: string amount: number currency: 'XAF' operator: 'AIRTEL' | 'MOOV' phone_number: string description?: string status: TransactionStatus is_test?: boolean environment?: 'live' | 'test' failure_reason?: string webhook_sent: boolean initiated_at: string confirmed_at?: string expires_at: string created_at: string updated_at?: string }

transactions.list(params)

const result = await kadryza.transactions.list({ limit: 50, offset: 0, status: 'SUCCESS', operator: 'AIRTEL', date_from: '2026-06-01', date_to: '2026-06-30', search: 'order_' })

Paramètres supportés :

ParamètreType
limitnumber
offsetnumber
statusTransactionStatus
operatorAIRTEL ou MOOV
date_fromstring
date_tostring
searchstring

Retour :

interface PaginatedTransactions { transactions: Transaction[] total: number limit: number offset: number }

paymentSessions.create(params)

Crée une payment session. merchant_id et l’environnement sont déduits de la clé API : ne les passez pas. Affichez assigned_collection_number à votre client.

const session = await kadryza.paymentSessions.create({ reference: 'order_2026_001', amount: 5000, currency: 'XAF', operator: 'AIRTEL', customer_phone: '+23566000000', // obligatoire en live ttl_minutes: 15, // optionnel, 1–60 (défaut 10) }) console.log(session.assigned_collection_number) // ex. "074000001" console.log(session.status) // "AWAITING_PAYMENT" console.log(session.environment) // "live" ou "test" selon la clé

paymentSessions.retrieve(id)

const session = await kadryza.paymentSessions.retrieve('a1b2c3d4-e5f6-7890-abcd-ef1234567890')

Renvoie KadryzaNotFoundError si la session n’existe pas pour votre compte ou votre environnement.

paymentSessions.retrieveByReference(reference)

Retrouve une session par votre référence : le chemin de récupération après une création dont la réponse a été perdue.

const session = await kadryza.paymentSessions.retrieveByReference('order_2026_001')

paymentSessions.listWebhookDeliveries(id)

Historique des livraisons webhook d’une session (statut, tentatives, dernier code HTTP), sans URL ni contenu.

const { deliveries } = await kadryza.paymentSessions.listWebhookDeliveries(session.id)

paymentSessions.cancel(id)

Annule une session de test encore AWAITING_PAYMENT. Une session live, ou une session déjà conclue, est refusée (409 NOT_CANCELLABLE, levée comme KadryzaDuplicateError).

const cancelled = await kadryza.paymentSessions.cancel(session.id) console.log(cancelled.status) // "CANCELLED"

webhooks.create({ url })

const endpoint = await kadryza.webhooks.create({ url: 'https://merchant.example.com/webhooks/kadryza' })

Retour :

interface CreatedWebhookEndpoint { id: string url: string is_active: boolean created_at: string secret: string }

Le champ secret est affiché uniquement à la création. Stockez-le immédiatement.

webhooks.list()

const endpoints = await kadryza.webhooks.list()

Retour :

interface WebhookEndpoint { id: string url: string is_active: boolean created_at: string }

webhooks.delete(id)

await kadryza.webhooks.delete(endpoint.id)

webhooks.test(id)

const result = await kadryza.webhooks.test(endpoint.id)

Retour :

interface WebhookTestResult { status: string message: string }

webhooks.verify(params)

const valid = kadryza.webhooks.verify({ payload: rawBody, signature: request.headers['x-kadryza-signature'], secret: process.env.KADRYZA_WEBHOOK_SECRET! })

verifyWebhookSignature(params)

import { verifyWebhookSignature } from '@kadryza/sdk' const valid = verifyWebhookSignature({ payload: rawBody, signature: 'sha256=<hmac_hex>', secret: process.env.KADRYZA_WEBHOOK_SECRET! })

Le format officiel est sha256=<hex>. Le SDK accepte aussi le hex brut pour compatibilité.

Types

type TransactionStatus = | 'PENDING' | 'PROCESSING' | 'WAITING_SMS' | 'SUCCESS' | 'FAILED' | 'TIMEOUT' | 'REFUNDED' type PaymentSessionStatus = | 'AWAITING_PAYMENT' | 'SUCCESS' | 'UNDER_REVIEW' | 'EXPIRED' | 'FAILED' | 'CANCELLED'

Événements webhook reconnus : payment_session.succeeded, payment_session.under_review, payment_session.expired, payment_session.failed (réservé), transaction.success, transaction.failed, transaction.timeout, transaction.test.

Erreurs

Les classes d’erreur sont choisies selon le statut HTTP ; pour les statuts 400, 401, 404, 409 et 503, le code exposé est générique (VALIDATION_ERROR, UNAUTHORIZED, NOT_FOUND, DUPLICATE_REFERENCE, GATEWAY_UNAVAILABLE) et ne reprend pas le code détaillé de l’API. Le message d’origine est conservé. Détails : Codes d’erreur.

ℹ️

Le SDK ne couvre pas le Hosted Checkout, l’activation d’un endpoint webhook, les liens de paiement, les remboursements, le solde, les retraits, les factures ni les clés API.