Checkout API

Encaisser depuis votre propre interface — comme Stripe Payment Element avec sessionId et /complete.

Quand l'utiliser

Choisissez ce parcours si vous avez déjà une UI de paiement ou une app mobile.

Vous contrôlez l'expérience utilisateur ; Izzi fournit les endpoints publics de session et de finalisation.

1. Créer une session

Même appel que le checkout hébergé : POST /checkout/sessions.

Conservez data.id (sessionId) — vous n'avez pas besoin de rediriger vers data.url.

bash
curl -X POST https://api.dev.izzi-finance.com/api/v1/checkout/sessions \
  -H "Authorization: Bearer izzi_mk_sandbox_…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "2500",
    "currency": "USD",
    "title": "Commande #1234",
    "allowedMethods": ["MOBILE_MONEY", "CARD"]
  }'

2. Afficher le formulaire

Appelez GET /checkout/pay/:sessionId (public, sans Bearer) pour récupérer montant, devise, allowedMethods et branding.

Construisez votre formulaire à partir de ces données.

bash
curl https://api.dev.izzi-finance.com/api/v1/checkout/pay/cs_38b62a204d2da0bcdd312c59

3. Finaliser le paiement

Soumettez POST /checkout/pay/:sessionId/complete avec paymentMethod et paymentDetails.

Voir le guide Compléter un paiement pour le détail par méthode (MOBILE_MONEY, CARD, WALLET, QR, BANK_TRANSFER).

bash
curl -X POST https://api.dev.izzi-finance.com/api/v1/checkout/pay/cs_38b62a204d2da0bcdd312c59/complete \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "MOBILE_MONEY",
    "paymentDetails": {
      "phone": "+243900000000",
      "operator": "ORANGE",
      "countryCode": "CD"
    }
  }'

4. Gérer nextAction

POLL — appelez GET /checkout/pay/:sessionId/status après pollAfterMs jusqu'à SUCCEEDED.

REDIRECT — redirigez le payeur vers actionUrl (3DS, page provider).

DISPLAY_QR — affichez qrPayload et pollez /status.

5. Webhooks et réconciliation

paymentIntentId et chargeId sont retournés dans la réponse /complete (ou via /status une fois SUCCEEDED).

Les webhooks payment.succeeded et checkout.session.completed confirment la finalisation côté serveur.

Consultez GET /payments/payment-intents/:id pour le détail du payment intent.