Développeurs

Tous les opérateurs mobile money, un seul branchement.

Une API REST, des webhooks signés, des SDK Node et PHP. Du test au réel en changeant de clé.

curl https://api.payiz.app/v1/payments \
  -H "Authorization: Bearer sk_test_…" \
  -H "Idempotency-Key: cmd-42" \
  -H "Content-Type: application/json" \
  -d '{ "amount": 10000, "currency": "XOF" }'
réponse
HTTP/1.1 201 Created
{
  "id": "pay_01j9x3kq7m4tzv8qhw2n",
  "status": "requires_payment",
  "amount": 10000,
  "payment_url": "https://pay.payiz.app/pay_01j9…"
}
Intégrer

Trois façons de brancher Payiz.

Le paiement direct

Votre écran, du numéro au reçu.

Un appel, une demandeVotre serveur envoie le montant et le numéro : la demande part aussitôt sur le téléphone du payeur.
La raison de chaque échecSolde, refus, délai : un code stable, et une phrase prête pour le payeur.
Relancer sans recréerLe même paiement, un autre numéro : jamais deux demandes à la fois.
Une clé qui le permetUn geste à cocher sur la clé secrète, restreinte aux adresses de vos serveurs.
demande
curl https://api.payiz.app/v1/payments \
  -H "Authorization: Bearer sk_test_…" \
  -H "Idempotency-Key: cmd-42" \
  -d '{
    "amount": 10000,
    "payer": {
      "phone": "+2290197000000",
      "operator": "mtn"
    }
  }'
réponse
HTTP/1.1 201 Created
{
  "status": "processing",
  "latest_attempt": {
    "status": "pending",
    "payer_message": "Validez sur votre téléphone."
  }
}
L’API v1

Prévisible, du premier appel au millionième.

REST et JSONDes adresses lisibles, des objets complets, un schéma OpenAPI.
Des montants entiersDans l’unité mineure de la devise : 10000 veut dire 10 000 F.
Une clé d’idempotenceRejouez sans crainte : la même clé ne crée jamais deux paiements.
Des listes par curseurPaginer sans perdre ni doubler une ligne, même quand ça bouge.
Des erreurs lisiblesUn code stable, le champ en cause, et ce qu’il faut corriger.
/v1/payments/v1/payment_links/v1/payment_methods/v1/disputes/v1/refunds/v1/payouts/v1/recipients/v1/balance
une erreur
HTTP/1.1 400 Bad Request
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "param": "amount",
    "message": "« amount » : un entier positif.",
    "request_id": "req_01j9x3t8m2k4c7vd9qhs"
  }
}
Webhooks

Ce qui arrive, poussé chez vous.

Un paiement réussi, un retrait versé, un remboursement échoué : Payiz vous l’envoie aussitôt, signé.

  • Signés : l’en-tête Payiz-Signature se vérifie sur le corps brut.
  • Relancés au calendrier quand votre serveur ne répond pas.
  • Chaque livraison dans un journal, et rejouable à la main.
Livraisonsboutique.bj/webhooks
200payment.succeededlivré
200payout.paidlivré
500refund.succeededrelancé dans 5 min
200payment.expiredrejoué à la main
Payiz-Signature: t=1790002692,v1=5f1c…
SDK

Node et PHP, sans écrire les appels.

import { Payiz } from 'payiz'

const payiz = new Payiz(process.env.PAYIZ_CLE)

const paiement = await payiz.payments.create({
  amount: 10000,
  currency: 'XOF',
  reference: 'cmd-42',
})

redirect(paiement.payment_url)
npm i payizcomposer require payiz/payiz-php
Tester

Tout s’essaie, rien ne bouge.

Les clés sk_test_ parlent à un simulateur : aucun franc ne bouge, les webhooks partent quand même. Les deux derniers chiffres du numéro choisissent ce qui arrive.

Le réel s’ouvre avec la vérification de votre compte. Dans votre code, seule la clé change : sk_live_ à la place de sk_test_.

Fin du numéro
…00réussi après 5 s
…01solde insuffisant
…02refus du payeur
…03pas de validation, expiré
…04statut inconnu, puis réussi
…05processeur indisponible
…06réussi sans notification

Les mêmes fins de numéro valent pour le paiement direct.

Avec une IA

Votre assistant lit la doc à votre place.

Chaque page en Markdown

Ajoutez .md à l’adresse d’une page : le texte brut, sans habillage.

llms.txt

L’index de la documentation, dans le format que les modèles connaissent.

Un serveur MCP

Branchez-le dans Claude Code, Cursor ou Devin : la doc devient un outil.

Clés et journaux

Chaque clé à sa place.

Clés d’API
Boutique, serveursk_live_…8f2a
paiements, remboursements2 adresses IP
Caisse du soirsk_live_…41c9
paiements : lirepartout
Application, directsk_live_…7b1e
paiements : lancer1 adresse IP
Des droits par cléLire, créer, rembourser : une clé ne fait que ce que vous lui laissez faire.
Des adresses autoriséesUne clé peut n’être valable que depuis vos serveurs, adresse par adresse.
Un renouvellement sans coupureL’ancienne clé vaut encore le temps de déployer la nouvelle.
Les requêtes des 30 derniers joursChaque appel, sa réponse et sa durée, dans votre espace.
La documentation

Par où entrer.

Votre premier paiement de test, en cinq minutes.

Une clé sk_test_, un appel, un reçu : la documentation vous prend par la main.