curl --request POST \
--url https://api.pay.izichange.com/v1/settlements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assetCode": "USDT.TRC20",
"amountCrypto": "250.75",
"settlementAccountId": "3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idempotencyKey": "settlement-2026-07-08-0001",
"merchantReference": "facture-4821",
"totpCode": "123456",
"effectiveBearers": {
"platform": "merchant",
"payout": "merchant",
"provider": "merchant",
"mno": "merchant"
}
}
'import requests
url = "https://api.pay.izichange.com/v1/settlements"
payload = {
"assetCode": "USDT.TRC20",
"amountCrypto": "250.75",
"settlementAccountId": "3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idempotencyKey": "settlement-2026-07-08-0001",
"merchantReference": "facture-4821",
"totpCode": "123456",
"effectiveBearers": {
"platform": "merchant",
"payout": "merchant",
"provider": "merchant",
"mno": "merchant"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assetCode: 'USDT.TRC20',
amountCrypto: '250.75',
settlementAccountId: '3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d',
idempotencyKey: 'settlement-2026-07-08-0001',
merchantReference: 'facture-4821',
totpCode: '123456',
effectiveBearers: {
platform: 'merchant',
payout: 'merchant',
provider: 'merchant',
mno: 'merchant'
}
})
};
fetch('https://api.pay.izichange.com/v1/settlements', 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://api.pay.izichange.com/v1/settlements",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assetCode' => 'USDT.TRC20',
'amountCrypto' => '250.75',
'settlementAccountId' => '3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d',
'idempotencyKey' => 'settlement-2026-07-08-0001',
'merchantReference' => 'facture-4821',
'totpCode' => '123456',
'effectiveBearers' => [
'platform' => 'merchant',
'payout' => 'merchant',
'provider' => 'merchant',
'mno' => 'merchant'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pay.izichange.com/v1/settlements"
payload := strings.NewReader("{\n \"assetCode\": \"USDT.TRC20\",\n \"amountCrypto\": \"250.75\",\n \"settlementAccountId\": \"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"idempotencyKey\": \"settlement-2026-07-08-0001\",\n \"merchantReference\": \"facture-4821\",\n \"totpCode\": \"123456\",\n \"effectiveBearers\": {\n \"platform\": \"merchant\",\n \"payout\": \"merchant\",\n \"provider\": \"merchant\",\n \"mno\": \"merchant\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pay.izichange.com/v1/settlements")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assetCode\": \"USDT.TRC20\",\n \"amountCrypto\": \"250.75\",\n \"settlementAccountId\": \"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"idempotencyKey\": \"settlement-2026-07-08-0001\",\n \"merchantReference\": \"facture-4821\",\n \"totpCode\": \"123456\",\n \"effectiveBearers\": {\n \"platform\": \"merchant\",\n \"payout\": \"merchant\",\n \"provider\": \"merchant\",\n \"mno\": \"merchant\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pay.izichange.com/v1/settlements")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assetCode\": \"USDT.TRC20\",\n \"amountCrypto\": \"250.75\",\n \"settlementAccountId\": \"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"idempotencyKey\": \"settlement-2026-07-08-0001\",\n \"merchantReference\": \"facture-4821\",\n \"totpCode\": \"123456\",\n \"effectiveBearers\": {\n \"platform\": \"merchant\",\n \"payout\": \"merchant\",\n \"provider\": \"merchant\",\n \"mno\": \"merchant\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"assetCode": "<string>",
"amountCrypto": "<string>",
"fiatCurrency": {},
"rateIndicative": "<string>",
"rateNet": "<string>",
"rateEffective": {},
"fiatAmountIndicative": "<string>",
"fiatAmountFinal": {},
"status": "<string>",
"mode": "<string>",
"providerReference": {},
"failureReason": {},
"merchantSettlementAccountId": "<string>",
"settlementAccount": {
"id": "<string>",
"label": {},
"receptionAddress": "<string>",
"paymentMethodName": {},
"currency": {}
},
"createdAt": "<string>",
"updatedAt": "<string>"
}Créer un settlement
Convertit un montant de crypto en fiat et envoie le résultat sur le compte de retrait choisi (ou le compte par défaut si settlementAccountId n’est pas fourni). Sur settlement manuel, tous les frais sont à la charge du marchand. Le header Idempotency-Key est recommandé pour permettre les retries sûrs.
curl --request POST \
--url https://api.pay.izichange.com/v1/settlements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assetCode": "USDT.TRC20",
"amountCrypto": "250.75",
"settlementAccountId": "3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idempotencyKey": "settlement-2026-07-08-0001",
"merchantReference": "facture-4821",
"totpCode": "123456",
"effectiveBearers": {
"platform": "merchant",
"payout": "merchant",
"provider": "merchant",
"mno": "merchant"
}
}
'import requests
url = "https://api.pay.izichange.com/v1/settlements"
payload = {
"assetCode": "USDT.TRC20",
"amountCrypto": "250.75",
"settlementAccountId": "3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idempotencyKey": "settlement-2026-07-08-0001",
"merchantReference": "facture-4821",
"totpCode": "123456",
"effectiveBearers": {
"platform": "merchant",
"payout": "merchant",
"provider": "merchant",
"mno": "merchant"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assetCode: 'USDT.TRC20',
amountCrypto: '250.75',
settlementAccountId: '3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d',
idempotencyKey: 'settlement-2026-07-08-0001',
merchantReference: 'facture-4821',
totpCode: '123456',
effectiveBearers: {
platform: 'merchant',
payout: 'merchant',
provider: 'merchant',
mno: 'merchant'
}
})
};
fetch('https://api.pay.izichange.com/v1/settlements', 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://api.pay.izichange.com/v1/settlements",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assetCode' => 'USDT.TRC20',
'amountCrypto' => '250.75',
'settlementAccountId' => '3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d',
'idempotencyKey' => 'settlement-2026-07-08-0001',
'merchantReference' => 'facture-4821',
'totpCode' => '123456',
'effectiveBearers' => [
'platform' => 'merchant',
'payout' => 'merchant',
'provider' => 'merchant',
'mno' => 'merchant'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pay.izichange.com/v1/settlements"
payload := strings.NewReader("{\n \"assetCode\": \"USDT.TRC20\",\n \"amountCrypto\": \"250.75\",\n \"settlementAccountId\": \"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"idempotencyKey\": \"settlement-2026-07-08-0001\",\n \"merchantReference\": \"facture-4821\",\n \"totpCode\": \"123456\",\n \"effectiveBearers\": {\n \"platform\": \"merchant\",\n \"payout\": \"merchant\",\n \"provider\": \"merchant\",\n \"mno\": \"merchant\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pay.izichange.com/v1/settlements")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assetCode\": \"USDT.TRC20\",\n \"amountCrypto\": \"250.75\",\n \"settlementAccountId\": \"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"idempotencyKey\": \"settlement-2026-07-08-0001\",\n \"merchantReference\": \"facture-4821\",\n \"totpCode\": \"123456\",\n \"effectiveBearers\": {\n \"platform\": \"merchant\",\n \"payout\": \"merchant\",\n \"provider\": \"merchant\",\n \"mno\": \"merchant\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pay.izichange.com/v1/settlements")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assetCode\": \"USDT.TRC20\",\n \"amountCrypto\": \"250.75\",\n \"settlementAccountId\": \"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"idempotencyKey\": \"settlement-2026-07-08-0001\",\n \"merchantReference\": \"facture-4821\",\n \"totpCode\": \"123456\",\n \"effectiveBearers\": {\n \"platform\": \"merchant\",\n \"payout\": \"merchant\",\n \"provider\": \"merchant\",\n \"mno\": \"merchant\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"assetCode": "<string>",
"amountCrypto": "<string>",
"fiatCurrency": {},
"rateIndicative": "<string>",
"rateNet": "<string>",
"rateEffective": {},
"fiatAmountIndicative": "<string>",
"fiatAmountFinal": {},
"status": "<string>",
"mode": "<string>",
"providerReference": {},
"failureReason": {},
"merchantSettlementAccountId": "<string>",
"settlementAccount": {
"id": "<string>",
"label": {},
"receptionAddress": "<string>",
"paymentMethodName": {},
"currency": {}
},
"createdAt": "<string>",
"updatedAt": "<string>"
}Autorisations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Corps
Cryptomonnaie à convertir en fiat. Doit figurer parmi les actifs retournés par GET /settlements/settleable-assets.
32^[A-Z0-9_.\-]{1,32}$"USDT.TRC20"
Montant de crypto à reverser, en unités de l'actif. Chaîne de caractères, jamais un nombre JSON : un montant crypto passé en number est arrondi par la précision flottante. Jusqu'à 18 décimales. Doit respecter le minimum retourné par GET /settlements/payment-methods.
^(?=.*[1-9])\d{1,18}(\.\d{1,18})?$"250.75"
Compte de réception fiat (mobile money ou bancaire) vers lequel le produit de la conversion est envoyé. Identifiants disponibles via GET /settlement-accounts.
"3f1b2c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
Clé d'idempotence. Rejouer la même clé retourne le settlement déjà créé au lieu d'en créer un second — indispensable pour un retry réseau sûr. Peut aussi être transmise via l'en-tête Idempotency-Key.
120^[A-Za-z0-9_.\-:]+$"settlement-2026-07-08-0001"
Référence libre côté marchand, reportée sur le payout fiat associé.
255"facture-4821"
Code TOTP à 6 chiffres. Requis uniquement pour les appels authentifiés par session utilisateur (dashboard) ; les appels par clé API n'en ont pas besoin.
^[0-9]{6}$"123456"
Répartition des frais pour CE reversement uniquement. Chaque clé omise retombe sur la configuration du compte marchand. Lorsqu'un type de frais est à la charge du client (customer), sa contribution doit déjà avoir été collectée au moment du paiement : à défaut, le reversement est rejeté avant tout débit, faute de solde.
Show child attributes
Show child attributes
Réponse
Settlement créé.
Identifiant unique du settlement.
Code de l'actif crypto envoyé pour conversion.
Quantité de crypto settlée — chaîne décimale.
Devise fiat reçue par le marchand (ISO 4217).
Taux brut fourni par le provider — chaîne décimale.
Taux effectif après marge IzichangePay — chaîne décimale. C'est ce taux qui est appliqué à l'exécution.
Taux finalement constaté à l'exécution — chaîne décimale, renseigné une fois le settlement complété.
Montant fiat indicatif attendu — chaîne décimale.
Montant fiat final crédité au marchand — chaîne décimale.
Statut courant du settlement (pending, dispatched, completed, failed, …).
Mode d'envoi de la crypto au provider : transfert on-chain ou transfert interne entre comptes IzichangePay.
Référence du provider (numéro d'ordre côté plateforme externe).
Motif d'échec — renseigné uniquement pour les settlements en échec.
Identifiant du compte de réception crédité.
Compte de réception crédité, tel qu'il était AU MOMENT du settlement. Renvoyé avec le settlement plutôt que résolu contre la liste courante des comptes : l'adresse créditée appartient au mouvement, pas au profil. null seulement si le compte a été supprimé depuis.
Show child attributes
Show child attributes
Date de création — ISO 8601.
Date de dernière mise à jour — ISO 8601.