Checkout hébergé

Endpoints publics du checkout : affichage, complétion, statut et liens.

GET/api/v1/checkout/pay/:sessionIdPublic

Afficher le checkout hébergé

Retourne les données publiques d'une session checkout : montant, branding, méthodes autorisées et champs personnalisés. Appelé par la page checkout avant le paiement.

Paramètres de chemin

NomTypeRequisDescription
sessionIdstringOuiIdentifiant de session (préfixe cs_)

Réponse (data)

NomTypeRequisDescription
sessionIdstringOuiIdentifiant de la session
statusstringOuiOPEN, SUCCEEDED, FAILED, EXPIRED, etc.
amountstringOuiMontant en chaîne : centimes pour USD (ex. 2500 = 25,00 USD), francs entiers pour CDF (ex. 5000 = 5 000 CDF)
currencystringOuiCode ISO 4217
environmentSANDBOX | PRODUCTIONOuiSANDBOX ou PRODUCTION: hérité de la clé API à la création. La page hébergée affiche un bandeau en mode test.
titlestringOuiTitre affiché au payeur
descriptionstring | nullNonDescription optionnelle
allowedMethodsWALLET | MOBILE_MONEY | CARD | BANK_TRANSFER | QROuiMéthodes affichées au payeur : intersection entre allowedMethods de la session (intention marchand), les règles de routage tenant, et: pour INTERNAL (CARD / Mobile Money): la capacité du sous-tenant processeur à router le paiement
merchantNamestring | nullNonNom affiché du marchand
expiresAtstring | nullNonDate d'expiration ISO 8601
requiresCustomerEmailbooleanOuitrue si le payeur doit saisir son email avant de payer (session sans customerEmail pré-rempli par le marchand). false si l'email est déjà connu.
failureCodestring | nullNonCode d'échec IZZIPAY normalisé (ex. INSUFFICIENT_FUNDS) si status = FAILED
failureMessagestring | nullNonMessage d'échec lisible pour le payeur si status = FAILED

Exemple réponse

json
{
  "success": true,
  "data": {
    "sessionId": "cs_38b62a204d2da0bcdd312c59",
    "status": "OPEN",
    "amount": "2500",
    "currency": "USD",
    "title": "Commande #1234",
    "description": "Achat boutique en ligne",
    "merchantName": "Merchant Shop SARL",
    "merchantLogo": "https://cdn.example/logo.png",
    "allowedMethods": [
      "WALLET",
      "MOBILE_MONEY",
      "CARD",
      "BANK_TRANSFER",
      "QR"
    ],
    "locale": "fr",
    "expiresAt": "2026-08-28T12:00:00.000Z",
    "branding": {
      "primaryColor": "#43A047"
    },
    "customFields": [],
    "requiresCustomerEmail": true,
    "successMessage": "Merci pour votre paiement !"
  },
  "error": null
}

Erreurs

  • CHECKOUT_SESSION_EXPIRED (409): La session checkout a expiré
  • CHECKOUT_NO_PAYMENT_METHODS (409): Aucune méthode de paiement n'est routable pour cette session (devise, montant ou configuration provider)
  • CHECKOUT_SESSION_ALREADY_COMPLETED (409): La session est déjà terminée

Exemples

bash
curl -X GET https://api.izzi-finance.com/api/v1/checkout/pay/:sessionId \
  -H "Content-Type: application/json"
POST/api/v1/checkout/pay/:sessionId/completePublic

Compléter un paiement checkout

Finalise le paiement pour une session ouverte. Header optionnel Idempotency-Key (sinon clé dérivée automatiquement). Crée un payment intent financial-core, une charge marchand et déclenche les webhooks payment.succeeded en cas de succès.

Paramètres de chemin

NomTypeRequisDescription
sessionIdstringOuiIdentifiant de session checkout

Corps de requête

NomTypeRequisDescription
paymentMethodWALLET | MOBILE_MONEY | CARD | BANK_TRANSFER | QROuiMéthode de paiement sélectionnée
paymentDetailsobjectOuiDétails du paiement. Le contenu dépend de paymentMethod. Objet vide pour QR et BANK_TRANSFER.
paymentDetails.phonestringNonRequis pour MOBILE_MONEY. Numéro international, ex. +243840000000. phoneNumber est accepté comme alias.
paymentDetails.operatorstringNonOptionnel pour MOBILE_MONEY. Code exact en majuscules. RDC (CD) : MPESA, AIRTEL ou ORANGE. MPESA = Vodacom M-Pesa, n'envoyez pas VODACOM. AFRICELL n'est pas accepté. S'il est omis, IZZIPAY le déduit du numéro. Autres pays : guide Mobile Money.
paymentDetails.countryCodestringNonOptionnel pour MOBILE_MONEY. Code ISO alpha-2. S'il est omis, IZZIPAY utilise l'indicatif du numéro, sinon la devise de la session.
paymentDetails.cardNumberstringNonRequis pour CARD. 13 à 19 chiffres.
paymentDetails.cardExpirystringNonRequis pour CARD. Format MM/AA, mois de 01 à 12, date non expirée.
paymentDetails.cardCvcstringNonRequis pour CARD. 3 ou 4 chiffres.
paymentDetails.walletIdstringNonOptionnel pour WALLET. UUID du portefeuille du payeur. Le débit se fait ensuite, une fois le payeur connecté. Réponse typique : nextAction AWAIT_WALLET_AUTH.
customerInfoobjectNonInformations client collectées sur la page checkout. customerInfo.email est obligatoire lorsque GET /checkout/pay/:sessionId renvoie requiresCustomerEmail: true (sauf paiement WALLET connecté).
customerInfo.emailstringNonAdresse email du payeur pour le reçu et le suivi. Ignorée si la session a déjà un customerEmail.

paymentDetails est toujours un objet. MOBILE_MONEY, CARD et WALLET : voir les champs ci-dessous. QR et BANK_TRANSFER : envoyez {}.

Exemples requête

json
{
  "paymentMethod": "MOBILE_MONEY",
  "paymentDetails": {
    "phone": "+243840000000",
    "operator": "ORANGE",
    "countryCode": "CD"
  },
  "customerInfo": {
    "email": "[email protected]"
  }
}

Réponse (data)

NomTypeRequisDescription
sessionIdstringOuiSession traitée
statusstringOuiSUCCEEDED, PROCESSING ou FAILED
paymentIntentIdstring | nullNonUUID du payment intent financial-core (créé puis confirmé)
chargeIdstring | nullNonCharge marchand créée en cas de succès
providerCodestring | nullNonProvider utilisé (INTERNAL, STRIPE, FLUTTERWAVE, etc.)
providerRefstring | nullNonRéférence externe du provider
nextActionPOLL | REDIRECT | DISPLAY_QR | AWAIT_WALLET_AUTHNonPOLL, REDIRECT, DISPLAY_QR ou AWAIT_WALLET_AUTH
actionUrlstring | nullNonURL de redirection (CARD, 3DS)
qrPayloadstring | nullNonPayload QR si nextAction = DISPLAY_QR
pollAfterMsnumberNonDélai recommandé avant GET /status
instructionsstring | nullNonInstructions affichées au payeur
redirectUrlstring | nullNonURL de redirection enrichie : successUrl (SUCCEEDED) ou cancelUrl (FAILED/CANCELLED) avec session_id, charge_id, amount, currency et status en query params

Exemples réponse

json
{
  "success": true,
  "data": {
    "sessionId": "cs_38b62a204d2da0bcdd312c59",
    "status": "SUCCEEDED",
    "redirectUrl": "https://merchant.example/success?session_id=cs_38b62a204d2da0bcdd312c59&amount=2500&currency=USD&status=SUCCEEDED&charge_id=a76c830e-b7f1-4fd4-b5b6-618ffdb76b62",
    "paymentIntentId": "b04cb5ed-3e0b-446a-b3cd-8ef2e2836b8d",
    "chargeId": "a76c830e-b7f1-4fd4-b5b6-618ffdb76b62",
    "providerCode": "INTERNAL",
    "providerRef": "internal_ref_001",
    "nextAction": "POLL",
    "actionUrl": null,
    "instructions": null,
    "qrPayload": null
  },
  "error": null
}

Erreurs

  • CHECKOUT_SESSION_EXPIRED (409): La session checkout a expiré
  • CHECKOUT_SESSION_NOT_OPEN (409): La session n'est plus payable (déjà payée, annulée ou fermée)
  • PAYMENT_METHOD_NOT_ALLOWED (409): La méthode demandée n'est pas disponible pour cette session checkout
  • INVALID_PAYMENT_DETAILS (400): paymentDetails invalides pour la méthode choisie
  • RISK_BLOCKED (409): Paiement bloqué par l'évaluation de risque
  • PAYMENT_FAILED (409): Échec de finalisation (intent ou provider)
  • PAYMENT_PROVIDER_NOT_AVAILABLE (409): Aucun provider disponible pour cette méthode et devise

Exemples

bash
curl -X POST https://api.izzi-finance.com/api/v1/checkout/pay/:sessionId/complete \
  -H "Content-Type: application/json" \
  -d '{
  "paymentMethod": "MOBILE_MONEY",
  "paymentDetails": {
    "phone": "+243840000000",
    "operator": "ORANGE",
    "countryCode": "CD"
  },
  "customerInfo": {
    "email": "[email protected]"
  }
}'
GET/api/v1/checkout/pay/:sessionId/statusPublic

Statut d'une session checkout

Polling du statut après un paiement asynchrone ou lorsque nextAction = POLL.

Paramètres de chemin

NomTypeRequisDescription
sessionIdstringOuiIdentifiant de session

Réponse (data)

NomTypeRequisDescription
statusstringOuiStatut courant de la session
paymentIntentIdstring | nullNonIntent lié une fois le paiement initié
chargeIdstring | nullNonCharge créée si SUCCEEDED
failureCodestring | nullNonCode d'échec IZZIPAY normalisé (ex. INSUFFICIENT_FUNDS) si status = FAILED
failureMessagestring | nullNonMessage d'échec lisible pour le payeur
redirectUrlstring | nullNonURL enrichie : successUrl si SUCCEEDED, cancelUrl si FAILED ou CANCELLED (query params session_id, charge_id, amount, currency, status)

Exemple réponse

json
{
  "success": true,
  "data": {
    "sessionId": "cs_38b62a204d2da0bcdd312c59",
    "status": "FAILED",
    "failureCode": "INSUFFICIENT_FUNDS",
    "failureMessage": "Votre compte mobile money n'a pas assez de fonds pour ce paiement.",
    "completedAt": null
  }
}

Exemples

bash
curl -X GET https://api.izzi-finance.com/api/v1/checkout/pay/:sessionId/status \
  -H "Content-Type: application/json"
POST/api/v1/checkout/pay/:sessionId/confirmPublic

Confirmer un paiement asynchrone

Confirme un paiement QR en attente. Réservé aux sessions PROCESSING avec paymentMethod QR: ne crée pas de charge immédiatement.

Paramètres de chemin

NomTypeRequisDescription
sessionIdstringOuiIdentifiant de session

Réponse (data)

NomTypeRequisDescription
sessionIdstringOuiSession traitée
statusstringOuiPROCESSING (confirmation QR en cours)

Exemple réponse

json
{
  "success": true,
  "data": {
    "sessionId": "cs_38b62a204d2da0bcdd312c59",
    "status": "PROCESSING"
  },
  "error": null
}

Erreurs

  • SESSION_NOT_PROCESSING (409): La session n'attend pas de confirmation
  • CONFIRM_NOT_SUPPORTED (409): Confirmation manuelle non supportée pour cette méthode
  • PAYMENT_NOT_FOUND (409): Aucun paiement en attente pour cette session
  • CONFIRM_FAILED (409): La confirmation du paiement a échoué

Exemples

bash
curl -X POST https://api.izzi-finance.com/api/v1/checkout/pay/:sessionId/confirm \
  -H "Content-Type: application/json"
POST/api/v1/checkout/pay/:sessionId/select-methodPublic

Sélectionner une méthode de paiement

Enregistre la méthode choisie avant l'appel /complete (flux en deux étapes).

Paramètres de chemin

NomTypeRequisDescription
sessionIdstringOuiIdentifiant de session

Corps de requête

NomTypeRequisDescription
methodWALLET | MOBILE_MONEY | CARD | BANK_TRANSFER | QROuiMéthode sélectionnée
detailsobjectNonDétails préliminaires optionnels

Exemple requête

json
{
  "method": "MOBILE_MONEY",
  "details": {
    "phone": "+243900000000"
  }
}

Réponse (data)

NomTypeRequisDescription
sessionIdstringOuiSession mise à jour
statusstringOuiPAYMENT_METHOD_SELECTED
methodstringOuiMéthode enregistrée

Exemple réponse

json
{
  "success": true,
  "data": {
    "sessionId": "cs_38b62a204d2da0bcdd312c59",
    "status": "PAYMENT_METHOD_SELECTED",
    "method": "MOBILE_MONEY"
  }
}

Exemples

bash
curl -X POST https://api.izzi-finance.com/api/v1/checkout/pay/:sessionId/select-method \
  -H "Content-Type: application/json" \
  -d '{
  "method": "MOBILE_MONEY",
  "details": {
    "phone": "+243900000000"
  }
}'