Payer une facture
curl --request POST \
  --url https://kennhosting.com/api/v1/invoices/{order_uuid}/pay \
  --header 'Authorization: Bearer <token>'

Requête

Les « factures » de l’API correspondent aux commandes (Order) accessibles par leur UUID public.
POST /v1/invoices/{order_uuid}/pay
Authorization: Bearer kh_live_xxxx
Content-Type: application/json

Paramètres de chemin

ParamètreTypeRequisDescription
order_uuidUUIDOuiUUID de la commande / facture

Corps de la requête

{
  "payment_method": "notchpay",
  "phone_number": "677123456",
  "callback_url": "https://votre-app.example/callback-paiement"
}
ChampTypeRequisDescription
payment_methodstringNonnotchpay, mobile_money ou card
phone_numberstringNonIndicatif / numéro pour Mobile Money si applicable
callback_urlURLNonURL de retour ; défaut : page commande côté client KennHosting

Réponse (200 OK)

{
  "success": true,
  "data": {
    "payment_id": "KHNP-API-KH-XXXXXXXXXX-1710000000",
    "invoice_id": "550e8400-e29b-41d4-a716-446655440000",
    "amount_fcfa": 10009,
    "currency": "XAF",
    "method": "notchpay",
    "status": "pending",
    "checkout_url": "https://…",
    "expires_at": "2024-06-15T10:45:00+00:00"
  }
}
ChampDescription
payment_idRéférence du paiement (OrderPayment.reference), à conserver pour le suivi
invoice_idUUID de la commande
checkout_urlLien de paiement NotchPay
expires_atDate/heure limite indicative (15 minutes)

Statut d’un paiement

GET /v1/payments/{reference}
Authorization: Bearer kh_live_xxxx
{reference} est la valeur payment_id renvoyée par POST …/pay. Vous pouvez aussi passer l’identifiant numérique interne du paiement si vous le connaissez. Permission : invoices:read

Réponse

{
  "success": true,
  "data": {
    "reference": "KHNP-API-KH-XXXXXXXXXX-1710000000",
    "id": 42,
    "status": "pending",
    "amount": 10009,
    "currency": "XAF",
    "provider": "notchpay",
    "order": {
      "uuid": "550e8400-e29b-41d4-a716-446655440000",
      "order_number": "KH-XXXXXXXXXX"
    },
    "paid_at": null,
    "created_at": "2024-06-15T10:30:00+00:00"
  }
}
Les statuts possibles pour status dépendent du fournisseur (ex. pending, paid, etc.).
Le champ provider de GET /v1/payments/{reference} dépend du moyen réellement utilisé (notchpay, cinetpay, etc.). Ne supposez pas une valeur unique côté intégration.

Webhooks

Les événements sortants documentés côté compte (ex. payment.completed, payment.failed) restent la source fiable pour l’automatisation. Configurez-les dans l’espace client → API → Webhooks.

Permissions requises

  • POST …/invoices/{uuid}/pay : invoices:pay
  • GET …/payments/{reference} : invoices:read
Les clés sandbox (kh_test_) ne permettent pas d’initier un paiement : toute écriture renvoie 403 avec sandbox_read_only.