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 unités mineures (ex. centimes)
currencystringOuiCode ISO 4217
titlestringOuiTitre affiché au payeur
descriptionstring | nullDescription 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 | nullNom affiché du marchand
expiresAtstring | nullDate d'expiration ISO 8601
failureCodestring | nullCode d'échec IZZIPAY normalisé (ex. INSUFFICIENT_FUNDS) si status = FAILED
failureMessagestring | nullMessage 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": [],
    "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.dev.izzi-finance.com/api/v1/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
paymentDetailsobjectOuiMOBILE_MONEY : phone/phoneNumber, operator?, countryCode?. CARD : cardNumber, cardExpiry, cardCvc. WALLET : walletId. QR/BANK_TRANSFER : selon provider.
customerInfoobjectMétadonnées client optionnelles

Corps commun à toutes les méthodes. Les champs de paymentDetails varient selon paymentMethod.

Exemple requête

json
{
  "paymentMethod": "MOBILE_MONEY",
  "paymentDetails": {
    "phone": "+243900000000",
    "operator": "ORANGE",
    "countryCode": "CD"
  }
}

Réponse (data)

NomTypeRequisDescription
sessionIdstringOuiSession traitée
statusstringOuiSUCCEEDED, PROCESSING ou FAILED
paymentIntentIdstring | nullUUID du payment intent financial-core (créé puis confirmé)
chargeIdstring | nullCharge marchand créée en cas de succès
providerCodestring | nullProvider utilisé (INTERNAL, STRIPE, FLUTTERWAVE, etc.)
providerRefstring | nullRéférence externe du provider
nextActionPOLL | REDIRECT | DISPLAY_QRPOLL, REDIRECT ou DISPLAY_QR
actionUrlstring | nullURL de redirection (CARD, 3DS)
qrPayloadstring | nullPayload QR si nextAction = DISPLAY_QR
pollAfterMsnumberDélai recommandé avant GET /status
instructionsstring | nullInstructions affichées au payeur
redirectUrlstring | nullURL 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.dev.izzi-finance.com/api/v1/api/v1/checkout/pay/:sessionId/complete \
  -H "Content-Type: application/json" \
  -d '{
  "paymentMethod": "MOBILE_MONEY",
  "paymentDetails": {
    "phone": "+243900000000",
    "operator": "ORANGE",
    "countryCode": "CD"
  }
}'
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 | nullIntent lié une fois le paiement initié
chargeIdstring | nullCharge créée si SUCCEEDED
failureCodestring | nullCode d'échec IZZIPAY normalisé (ex. INSUFFICIENT_FUNDS) si status = FAILED
failureMessagestring | nullMessage d'échec lisible pour le payeur
redirectUrlstring | nullURL 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.dev.izzi-finance.com/api/v1/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.dev.izzi-finance.com/api/v1/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
detailsobjectDé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.dev.izzi-finance.com/api/v1/api/v1/checkout/pay/:sessionId/select-method \
  -H "Content-Type: application/json" \
  -d '{
  "method": "MOBILE_MONEY",
  "details": {
    "phone": "+243900000000"
  }
}'