Consulter le solde
curl --request GET \
--url https://sandbox-api.caurisflux.com/api/v1/payments/balance \
--header 'X-API-Key: <api-key>'import requests
url = "https://sandbox-api.caurisflux.com/api/v1/payments/balance"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://sandbox-api.caurisflux.com/api/v1/payments/balance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.caurisflux.com/api/v1/payments/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.caurisflux.com/api/v1/payments/balance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.caurisflux.com/api/v1/payments/balance")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.caurisflux.com/api/v1/payments/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodySolde
Consulter le solde
Récupérer les soldes disponibles, par devise et par catégorie
GET
/
payments
/
balance
Consulter le solde
curl --request GET \
--url https://sandbox-api.caurisflux.com/api/v1/payments/balance \
--header 'X-API-Key: <api-key>'import requests
url = "https://sandbox-api.caurisflux.com/api/v1/payments/balance"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://sandbox-api.caurisflux.com/api/v1/payments/balance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.caurisflux.com/api/v1/payments/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.caurisflux.com/api/v1/payments/balance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.caurisflux.com/api/v1/payments/balance")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.caurisflux.com/api/v1/payments/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyRécupère l’ensemble de vos soldes, regroupés par devise puis par catégorie.
Ces trois catégories sont toujours présentes, à zéro le cas échéant. D’autres peuvent
apparaître si votre compte en utilise.
Changement de format. La réponse ne contient plus de bloc mono-devise à la racine
(
currency, categories, totals). Ces champs ont été remplacés par le tableau balances,
qui liste une entrée par devise détenue. Voir Migration.Authentification
X-API-Key: pk_test_xxx:sk_test_xxx
Requête
curl https://sandbox-api.caurisflux.com/api/v1/payments/balance \
-H "X-API-Key: pk_test_xxx:sk_test_xxx"
Réponse
{
"success": true,
"data": {
"balanceMode": "separate",
"payoutSourceCategory": "payout",
"balances": [
{
"currency": "XOF",
"categories": {
"collect": { "available": 1500000, "pending": 250000 },
"payout": { "available": 500000, "pending": 0 },
"credit": { "available": 0, "pending": 0 }
},
"totals": { "available": 2000000, "pending": 250000 },
"updatedAt": "2026-08-11T12:30:00.000Z"
},
{
"currency": "XAF",
"categories": {
"collect": { "available": 340000, "pending": 0 },
"payout": { "available": 0, "pending": 0 },
"credit": { "available": 0, "pending": 0 }
},
"totals": { "available": 340000, "pending": 0 },
"updatedAt": "2026-08-11T09:12:00.000Z"
}
]
}
}
Champs de réponse
| Champ | Type | Description |
|---|---|---|
balanceMode | string | separate ou unified — voir ci-dessous |
payoutSourceCategory | string | Catégorie réellement débitée par vos payouts (payout ou collect) |
balances | array | Une entrée par devise détenue |
balances[].currency | string | Devise de l’entrée |
balances[].categories | object | Soldes par catégorie, dans cette devise |
balances[].categories.*.available | number | Montant utilisable immédiatement |
balances[].categories.*.pending | number | Montant en attente de confirmation |
balances[].totals.available | number | Total disponible dans cette devise |
balances[].totals.pending | number | Total en attente dans cette devise |
balances[].updatedAt | string|null | Dernier mouvement sur cette devise |
Les totaux ne sont jamais agrégés entre devises : additionner des XOF et des CDF n’aurait
aucun sens, et un total unique en masquerait une. À vous de convertir si vous souhaitez
afficher une valeur consolidée.
Catégories
| Catégorie | Description |
|---|---|
collect | Encaissements (paiements reçus) |
payout | Fonds dédiés aux décaissements |
credit | Ligne de crédit, si activée |
Mode de solde
balanceMode détermine quel portefeuille finance vos payouts.
| Mode | Comportement |
|---|---|
separate | collect et payout sont cloisonnés. Les payouts débitent payout, qu’il faut alimenter. |
unified | collect finance directement les payouts. La catégorie payout reste à zéro par construction. |
En mode
unified, un solde payout à zéro n’est pas une anomalie. Fiez-vous à
payoutSourceCategory pour savoir où lire le solde qui compte réellement.Solde disponible et solde en attente
- available — utilisable immédiatement, notamment pour un payout
- pending — en attente de confirmation par le fournisseur de paiement
pending à available après confirmation, généralement en quelques
heures.
Migration depuis l’ancien format
L’ancienne réponse exposait un seul jeu de soldes, implicitement dans la devise du compte. Un marchand encaissant en XAF ou en CDF ne voyait donc pas ces fonds.// Avant — ne renvoie plus rien
const dispo = res.data.categories.collect.available;
const devise = res.data.currency;
// Après — sélectionnez la devise voulue
const xof = res.data.balances.find((b) => b.currency === 'XOF');
const dispo = xof?.categories.collect.available ?? 0;
// Ou lisez la catégorie qui finance vos payouts
const source = res.data.payoutSourceCategory;
const dispoPayout = xof?.categories[source].available ?? 0;
Utilisation
- Vérifier le solde disponible avant un payout, dans la devise du payout
- Afficher vos soldes multi-devises dans votre propre interface
- Déclencher des alertes de solde bas par devise