Aller au contenu

Commandes API et ressources

Une même grammaire pour toutes les ressources, plus une requête brute lorsque vous en avez besoin.

La plupart des quatre-vingt-onze commandes appliquent les cinq mêmes verbes à onze ressources. Apprenez cette grammaire une fois pour piloter toute l'API sans ouvrir la référence.

La structure
wajub <resource> list
wajub <resource> retrieve <id>
wajub <resource> create -d field=value
wajub <resource> update <id> -d field=value
wajub <resource> delete <id>

payments, customers, refunds, transfers, beneficiaries, links, invoices, events, disputes, accounts et webhooks suivent cette structure, sans les verbes qui n'ont aucun sens pour eux. refunds update n'existe pas, car un remboursement ne peut pas être modifié. shield, identity et skills possèdent leur propre structure, présentée à la fin de cette page.

Envoyer un corps de requête

Deux méthodes sont disponibles et ne se mélangent pas. Utilisez -d dans le cas courant et --data-raw dans tous les autres.

Champs répétables ou objet JSON unique
# Repeatable key=value. Dots build nested objects.
wajub payments create \
  -d amount=25000 \
  -d currency=XAF \
  -d channel=cm.mtn \
  -d customer.email=amina@example.com \
  -d customer.phone=+237670000000

# Anything with arrays, or a body you already have
wajub webhooks create --data-raw '{
  "url": "https://example.com/webhooks/wajub",
  "events": ["payment.succeeded", "payment.failed"]
}'

Les tableaux nécessitent `--data-raw`

-d construit des objets avec des points, pas des listes. events[0]=payment.succeeded est envoyé comme un champ littéralement nommé events[0], que l'API refuse. Utilisez --data-raw pour tout corps qui contient un tableau.

Répertorier des ressources

Toutes les commandes list proposent les neuf mêmes options.

OptionEffet
--limitNombre maximal d'éléments. Avec --all, limite le total plutôt que la page
--pageUne page précise
--allSuit la pagination jusqu'à la fin ou jusqu'à --limit
-q, --searchRecherche en texte intégral
-f, --filterkey=value, répétable et envoyé comme paramètre d'URL
--statusFiltre selon le statut
--sinceCréé à cette date ou après, au format YYYY-MM-DD
--untilCréé à cette date ou avant, au format YYYY-MM-DD
--expandDéveloppe une ressource imbriquée, répétable
Limiter une liste
wajub payments list --limit 5
wajub payments list --status failed --since 2026-01-01
wajub payments list -q amina@example.com
wajub transfers list --all --limit 500 --json > transfers.json

--since et --until représentent des journées entières. L'API filtre les paiements selon la date civile. Vous ne pouvez pas demander uniquement les deux dernières heures. Pour une période plus courte, répertoriez la journée et filtrez vous-même le JSON.

Requêtes brutes

Lorsqu'une route ne possède aucune commande dédiée, ou si vous voulez voir la réponse exacte de l'API, trois commandes acceptent n'importe quel chemin.

get, post et delete
wajub get /balance
wajub get "/payments?per_page=5&status=succeeded"
wajub get /tax/settings

wajub post /customers -d email=amina@example.com -d name="Amina Nkem"
wajub post /transfers --data-raw '{"amount":100000,"currency":"XAF","beneficiary":"ben_…"}'

wajub delete /payments/trx_CSUGajfv9xh0XQ5wu2lx

Le chemin est relatif à la base de l'API et la clé provient de votre profil. Vous n'avez donc aucun en-tête à retenir et aucune clé dans votre historique. Placez entre guillemets tout chemin contenant &, sinon votre shell l'interprétera.

Deux options qui changent le sens de la requête

--idempotency-key définit l'en-tête Idempotency-Key. La CLI en génère déjà un nouveau pour chaque appel create. Indiquez-le seulement pour que deux exécutions soient traitées comme une même tentative. Il s'applique aux paiements, transferts et remboursements.

--sync définit l'en-tête X-Sync et exécute l'appel au nom d'un compte connecté. Cette option est disponible sur toutes les commandes d'écriture pour lesquelles elle a un sens.

Réessayer sans risque et agir pour un marchand connecté
# Run this twice: the second call returns the first result, it does not charge twice
wajub payments create -d amount=25000 -d currency=XAF --idempotency-key order-4172

# Create the payment on a connected merchant's account
wajub payments create -d amount=25000 -d currency=XAF --sync acc_7Yh2MpL4tRb3nP8sZcXv

Sortie

La sortie destinée aux humains est un tableau. --json affiche l'enveloppe de réponse de l'API sans modification. Les listes se trouvent donc sous items et le solde sous balance. Utilisez cette sortie dans vos pipelines.

Composer avec jq
wajub payments list --status failed --json \
  | jq -r '.items[] | [.id, .amount, .failure_reason] | @tsv'

wajub balance --json | jq '.balance.available'

# Every failed payout of the month, as CSV
wajub transfers list --status failed --since 2026-01-01 --json \
  | jq -r '.items[] | [.id, .amount, .currency, .failure_reason] | @csv'

Commandes qui demandent une confirmation

Toute opération qui déplace de l'argent ou détruit un enregistrement demande une confirmation. --yes, -y ou son alias --force ignore cette demande. Utilisez cette option dans un script et nulle part ailleurs.

CommandeMotif de la confirmation
transfers createEnvoie de l'argent
refunds createRembourse de l'argent
payments processDébite le payeur
webhooks rotate-secretInvalide le secret utilisé par votre serveur
accounts tokenRenouvelle le jeton d'un compte connecté
Toutes les commandes deleteSuppriment l'enregistrement

Commandes en lecture seule

Quatre commandes sans argument répondent à des questions que vous devriez autrement rechercher.

Données de référence et votre propre solde
wajub balance      # your balance, per currency
wajub channels     # every channel slug you may use
wajub countries    # supported countries
wajub currencies   # supported currencies

Utilisez wajub channels lorsqu'un paiement échoue à cause d'un canal inconnu. La commande présente exactement les slugs utilisables par votre compte, qui ne correspondent pas toujours au catalogue complet.

Dans la sandbox, wajub balance renvoie un objet simplifié où available est égal à total et les autres valeurs sont nulles. Le détail complet existe uniquement en live.

Identity et Shield

Deux thèmes ne suivent pas la grammaire CRUD, car les produits sous-jacents ne la suivent pas.

Recherche de nom et contrôles contre la fraude
# Who owns this wallet, before you send money to it
wajub identity resolve -d phone=+237670000000 -d channel=cm.mtn
wajub identity validate -d account=00012345678 -d bank=afriland

# Shield
wajub shield stats
wajub shield settings
wajub shield blocklist
wajub shield block +237670000000 --type phone --reason "chargeback ring"
wajub shield unblock blk_9mWvL2xR7tB5nY4hC6dF

--type accepte email, phone, ip, country et card_bin. La liste de blocage de Shield s'applique au trafic live. Un profil de sandbox ne permet donc pas de tester un blocage.

Que pensez-vous de ce contenu ?