Aller au contenu
Support

Lancer un paiement (mode B)

Mode B (COVERAF encaisse) : lance un paiement Mobile Money. Résultat par notification ou GET /v1/souscriptions/{id}.

POSThttps://api.coveraf.com/v1/souscriptions/{id}/paiement
SignéIdempotentRéponse JSON 201Sandbox et production
Réservé au mode B

La réponse arrive tout de suite avec paiement.statut: en_attente ; le résultat suit par notification ou en consultant la souscription. Voir Mode B.

En sandbox

Le résultat dépend du numéro payeur : 0700000001 réussit, 0700000002 à 0700000004 échouent. Voir Sandbox.

En-têtes

En-têteObligatoireValeur
AuthorizationouiBearer suivi de votre clé API (cvr_test_... ou cvr_live_...).
Content-Typeouiapplication/json
X-Coveraf-TimestampouiHeure actuelle, horodatage Unix en secondes.
X-Coveraf-Signatureouiv1= suivi du HMAC-SHA256 de la requête. Comment signer
Idempotency-KeyouiIdentifiant unique de l'opération (UUID). Idempotence

Paramètres de chemin

ChampTypeObligatoireDescription
idtexteouiIdentifiant de la souscription (sou_...).

Corps de la requête

ChampTypeObligatoireDescription
operateur« orange » | « mtn » | « moov » | « wave » | « djamo »ouiOpérateur Mobile Money du client.
telephone_payeurtextenonNuméro Mobile Money qui paie, 8 à 15 chiffres. Sans numéro, le client le saisit sur la page lien_paiement.
url_retouradresse httpsnonPage de votre application où revient le client après paiement (500 caractères maximum).

Exemple de requête

IDEMPOTENCY_KEY=$(uuidgen) ./coveraf.sh POST /v1/souscriptions/sou_bd4094da89da4a2e0e6078de/paiement '{"operateur":"orange","telephone_payeur":"0700000001","url_retour":"https://app.votre-societe.ci/paiement/retour"}'

Les fonctions appelCoveraf, appel_coveraf et le script coveraf.sh signent la requête pour vous : téléchargez-les.

Réponse

Succès (201), réponse réelle de la sandbox
{
  "id": "sou_f6ac5791c1dd467dd238607f",
  "objet": "souscription",
  "environnement": "test",
  "statut": "en_attente_paiement",
  "devis_id": "dev_44cfca8ed08b74ff676b9474",
  "montant_a_payer": {
    "montant": 12980,
    "devise": "XOF"
  },
  "mode_paiement": "jeko",
  "date_effet_prevue": "2026-11-04",
  "souscripteur": {
    "nom": "KONE",
    "prenom": "Awa",
    "telephone": "+2250701020304"
  },
  "reference_partenaire": "CMD-2026-0042",
  "paiement": {
    "id": "pay_e6bf7dd3fd60f74b08c1fef9",
    "statut": "en_attente",
    "operateur": "orange",
    "montant": 12980,
    "lien_paiement": "http://localhost:3005/sandbox/paiement/pay_e6bf7dd3fd60f74b08c1fef9",
    "motif_echec": null,
    "cree_le": "2026-11-04T17:35:45.931257+00:00"
  },
  "contrat": null,
  "expire_le": "2026-11-19T17:35:42.74+00:00",
  "payee_le": null,
  "cree_le": "2026-11-04T17:35:43.359143+00:00"
}

Description de chaque champ : modèle Souscription.

Erreurs possibles

CodeHTTPSignification
mode_paiement_incompatible403Ce mode de paiement n'est pas celui prévu pour votre compte.
paiement_deja_en_cours409Un paiement est déjà en cours pour cette souscription. Attendez son résultat (notification ou GET /v1/souscriptions/{id}).
souscription_deja_payee409Cette souscription est déjà payée : son contrat est émis.
souscription_expiree410Cette demande de souscription a expiré (son devis n'est plus valable). Demandez un nouveau devis.
emission_en_cours409Ce paiement est déjà en cours de traitement. Consultez GET /v1/souscriptions/{id} dans quelques secondes.
validation422Certaines données sont manquantes ou incorrectes. Voir erreur.details.
service_indisponible503Service momentanément indisponible. Réessayez dans un instant.

S'y ajoutent les erreurs communes à tous les appels (clé, signature, limite de débit, service) : voir Codes d'erreur.