curl --request PATCH \
--url https://api.pay.izichange.com/v1/invoices/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"customerEmail": "client@example.com",
"customerName": "Awa Diallo",
"amount": "30000",
"currency": "XOF",
"description": "Abonnement Pro — juillet 2026",
"expiresAt": "2026-07-31T23:59:59.000Z",
"assetCode": "USDT.TRC20",
"meta": {
"items": [
{
"name": "Abonnement Pro — juillet 2026",
"quantity": 2,
"unitPrice": "15000",
"description": "Accès illimité, 5 utilisateurs"
}
],
"notes": "Paiement à réception. Merci de votre confiance."
},
"merchantReference": "facture-4821",
"language": "en",
"collectCustomerInformation": false,
"autoSettlement": {
"enabled": true,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
'import requests
url = "https://api.pay.izichange.com/v1/invoices/{id}"
payload = {
"customerEmail": "client@example.com",
"customerName": "Awa Diallo",
"amount": "30000",
"currency": "XOF",
"description": "Abonnement Pro — juillet 2026",
"expiresAt": "2026-07-31T23:59:59.000Z",
"assetCode": "USDT.TRC20",
"meta": {
"items": [
{
"name": "Abonnement Pro — juillet 2026",
"quantity": 2,
"unitPrice": "15000",
"description": "Accès illimité, 5 utilisateurs"
}
],
"notes": "Paiement à réception. Merci de votre confiance."
},
"merchantReference": "facture-4821",
"language": "en",
"collectCustomerInformation": False,
"autoSettlement": {
"enabled": True,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customerEmail: 'client@example.com',
customerName: 'Awa Diallo',
amount: '30000',
currency: 'XOF',
description: 'Abonnement Pro — juillet 2026',
expiresAt: '2026-07-31T23:59:59.000Z',
assetCode: 'USDT.TRC20',
meta: {
items: [
{
name: 'Abonnement Pro — juillet 2026',
quantity: 2,
unitPrice: '15000',
description: 'Accès illimité, 5 utilisateurs'
}
],
notes: 'Paiement à réception. Merci de votre confiance.'
},
merchantReference: 'facture-4821',
language: 'en',
collectCustomerInformation: false,
autoSettlement: {
enabled: true,
settlementAccountAddress: '+22501020304',
settlementPaymentMethodId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
})
};
fetch('https://api.pay.izichange.com/v1/invoices/{id}', 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/invoices/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'customerEmail' => 'client@example.com',
'customerName' => 'Awa Diallo',
'amount' => '30000',
'currency' => 'XOF',
'description' => 'Abonnement Pro — juillet 2026',
'expiresAt' => '2026-07-31T23:59:59.000Z',
'assetCode' => 'USDT.TRC20',
'meta' => [
'items' => [
[
'name' => 'Abonnement Pro — juillet 2026',
'quantity' => 2,
'unitPrice' => '15000',
'description' => 'Accès illimité, 5 utilisateurs'
]
],
'notes' => 'Paiement à réception. Merci de votre confiance.'
],
'merchantReference' => 'facture-4821',
'language' => 'en',
'collectCustomerInformation' => false,
'autoSettlement' => [
'enabled' => true,
'settlementAccountAddress' => '+22501020304',
'settlementPaymentMethodId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
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/invoices/{id}"
payload := strings.NewReader("{\n \"customerEmail\": \"client@example.com\",\n \"customerName\": \"Awa Diallo\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"description\": \"Abonnement Pro — juillet 2026\",\n \"expiresAt\": \"2026-07-31T23:59:59.000Z\",\n \"assetCode\": \"USDT.TRC20\",\n \"meta\": {\n \"items\": [\n {\n \"name\": \"Abonnement Pro — juillet 2026\",\n \"quantity\": 2,\n \"unitPrice\": \"15000\",\n \"description\": \"Accès illimité, 5 utilisateurs\"\n }\n ],\n \"notes\": \"Paiement à réception. Merci de votre confiance.\"\n },\n \"merchantReference\": \"facture-4821\",\n \"language\": \"en\",\n \"collectCustomerInformation\": false,\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.pay.izichange.com/v1/invoices/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"customerEmail\": \"client@example.com\",\n \"customerName\": \"Awa Diallo\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"description\": \"Abonnement Pro — juillet 2026\",\n \"expiresAt\": \"2026-07-31T23:59:59.000Z\",\n \"assetCode\": \"USDT.TRC20\",\n \"meta\": {\n \"items\": [\n {\n \"name\": \"Abonnement Pro — juillet 2026\",\n \"quantity\": 2,\n \"unitPrice\": \"15000\",\n \"description\": \"Accès illimité, 5 utilisateurs\"\n }\n ],\n \"notes\": \"Paiement à réception. Merci de votre confiance.\"\n },\n \"merchantReference\": \"facture-4821\",\n \"language\": \"en\",\n \"collectCustomerInformation\": false,\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pay.izichange.com/v1/invoices/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerEmail\": \"client@example.com\",\n \"customerName\": \"Awa Diallo\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"description\": \"Abonnement Pro — juillet 2026\",\n \"expiresAt\": \"2026-07-31T23:59:59.000Z\",\n \"assetCode\": \"USDT.TRC20\",\n \"meta\": {\n \"items\": [\n {\n \"name\": \"Abonnement Pro — juillet 2026\",\n \"quantity\": 2,\n \"unitPrice\": \"15000\",\n \"description\": \"Accès illimité, 5 utilisateurs\"\n }\n ],\n \"notes\": \"Paiement à réception. Merci de votre confiance.\"\n },\n \"merchantReference\": \"facture-4821\",\n \"language\": \"en\",\n \"collectCustomerInformation\": false,\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"customerEmail": "<string>",
"customerName": "<string>",
"amount": "<string>",
"currency": "<string>",
"assetCode": {},
"description": {},
"meta": {},
"status": "<string>",
"paymentIntentId": {},
"expiresAt": {},
"createdAt": "<string>",
"paymentLink": "<string>"
}Modifier une facture
Met à jour les champs d’une facture non payée et non annulée. La cohérence entre le montant et les articles est revalidée à chaque modification.
curl --request PATCH \
--url https://api.pay.izichange.com/v1/invoices/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"customerEmail": "client@example.com",
"customerName": "Awa Diallo",
"amount": "30000",
"currency": "XOF",
"description": "Abonnement Pro — juillet 2026",
"expiresAt": "2026-07-31T23:59:59.000Z",
"assetCode": "USDT.TRC20",
"meta": {
"items": [
{
"name": "Abonnement Pro — juillet 2026",
"quantity": 2,
"unitPrice": "15000",
"description": "Accès illimité, 5 utilisateurs"
}
],
"notes": "Paiement à réception. Merci de votre confiance."
},
"merchantReference": "facture-4821",
"language": "en",
"collectCustomerInformation": false,
"autoSettlement": {
"enabled": true,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
'import requests
url = "https://api.pay.izichange.com/v1/invoices/{id}"
payload = {
"customerEmail": "client@example.com",
"customerName": "Awa Diallo",
"amount": "30000",
"currency": "XOF",
"description": "Abonnement Pro — juillet 2026",
"expiresAt": "2026-07-31T23:59:59.000Z",
"assetCode": "USDT.TRC20",
"meta": {
"items": [
{
"name": "Abonnement Pro — juillet 2026",
"quantity": 2,
"unitPrice": "15000",
"description": "Accès illimité, 5 utilisateurs"
}
],
"notes": "Paiement à réception. Merci de votre confiance."
},
"merchantReference": "facture-4821",
"language": "en",
"collectCustomerInformation": False,
"autoSettlement": {
"enabled": True,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customerEmail: 'client@example.com',
customerName: 'Awa Diallo',
amount: '30000',
currency: 'XOF',
description: 'Abonnement Pro — juillet 2026',
expiresAt: '2026-07-31T23:59:59.000Z',
assetCode: 'USDT.TRC20',
meta: {
items: [
{
name: 'Abonnement Pro — juillet 2026',
quantity: 2,
unitPrice: '15000',
description: 'Accès illimité, 5 utilisateurs'
}
],
notes: 'Paiement à réception. Merci de votre confiance.'
},
merchantReference: 'facture-4821',
language: 'en',
collectCustomerInformation: false,
autoSettlement: {
enabled: true,
settlementAccountAddress: '+22501020304',
settlementPaymentMethodId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
})
};
fetch('https://api.pay.izichange.com/v1/invoices/{id}', 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/invoices/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'customerEmail' => 'client@example.com',
'customerName' => 'Awa Diallo',
'amount' => '30000',
'currency' => 'XOF',
'description' => 'Abonnement Pro — juillet 2026',
'expiresAt' => '2026-07-31T23:59:59.000Z',
'assetCode' => 'USDT.TRC20',
'meta' => [
'items' => [
[
'name' => 'Abonnement Pro — juillet 2026',
'quantity' => 2,
'unitPrice' => '15000',
'description' => 'Accès illimité, 5 utilisateurs'
]
],
'notes' => 'Paiement à réception. Merci de votre confiance.'
],
'merchantReference' => 'facture-4821',
'language' => 'en',
'collectCustomerInformation' => false,
'autoSettlement' => [
'enabled' => true,
'settlementAccountAddress' => '+22501020304',
'settlementPaymentMethodId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
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/invoices/{id}"
payload := strings.NewReader("{\n \"customerEmail\": \"client@example.com\",\n \"customerName\": \"Awa Diallo\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"description\": \"Abonnement Pro — juillet 2026\",\n \"expiresAt\": \"2026-07-31T23:59:59.000Z\",\n \"assetCode\": \"USDT.TRC20\",\n \"meta\": {\n \"items\": [\n {\n \"name\": \"Abonnement Pro — juillet 2026\",\n \"quantity\": 2,\n \"unitPrice\": \"15000\",\n \"description\": \"Accès illimité, 5 utilisateurs\"\n }\n ],\n \"notes\": \"Paiement à réception. Merci de votre confiance.\"\n },\n \"merchantReference\": \"facture-4821\",\n \"language\": \"en\",\n \"collectCustomerInformation\": false,\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.pay.izichange.com/v1/invoices/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"customerEmail\": \"client@example.com\",\n \"customerName\": \"Awa Diallo\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"description\": \"Abonnement Pro — juillet 2026\",\n \"expiresAt\": \"2026-07-31T23:59:59.000Z\",\n \"assetCode\": \"USDT.TRC20\",\n \"meta\": {\n \"items\": [\n {\n \"name\": \"Abonnement Pro — juillet 2026\",\n \"quantity\": 2,\n \"unitPrice\": \"15000\",\n \"description\": \"Accès illimité, 5 utilisateurs\"\n }\n ],\n \"notes\": \"Paiement à réception. Merci de votre confiance.\"\n },\n \"merchantReference\": \"facture-4821\",\n \"language\": \"en\",\n \"collectCustomerInformation\": false,\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pay.izichange.com/v1/invoices/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerEmail\": \"client@example.com\",\n \"customerName\": \"Awa Diallo\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"description\": \"Abonnement Pro — juillet 2026\",\n \"expiresAt\": \"2026-07-31T23:59:59.000Z\",\n \"assetCode\": \"USDT.TRC20\",\n \"meta\": {\n \"items\": [\n {\n \"name\": \"Abonnement Pro — juillet 2026\",\n \"quantity\": 2,\n \"unitPrice\": \"15000\",\n \"description\": \"Accès illimité, 5 utilisateurs\"\n }\n ],\n \"notes\": \"Paiement à réception. Merci de votre confiance.\"\n },\n \"merchantReference\": \"facture-4821\",\n \"language\": \"en\",\n \"collectCustomerInformation\": false,\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"customerEmail": "<string>",
"customerName": "<string>",
"amount": "<string>",
"currency": "<string>",
"assetCode": {},
"description": {},
"meta": {},
"status": "<string>",
"paymentIntentId": {},
"expiresAt": {},
"createdAt": "<string>",
"paymentLink": "<string>"
}Autorisations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Paramètres de chemin
Identifiant de la facture.
Corps
Email du client final. La facture lui est envoyée à cette adresse.
"client@example.com"
Nom du client final, tel qu'il doit apparaître sur la facture.
"Awa Diallo"
Montant total de la facture, exprimé dans currency. Chaîne de caractères, jamais un nombre JSON : un montant passé en number est arrondi par la précision flottante. Jusqu'à 18 décimales, et strictement supérieur à zéro.
^(?=.*[1-9])\d{1,18}(\.\d{1,18})?$"30000"
Devise fiat dans laquelle la facture est libellée. Ex : XOF, EUR, USD.
"XOF"
Objet de la facture, affiché au client final.
"Abonnement Pro — juillet 2026"
Date d'échéance de la facture, au format ISO 8601. Passé ce délai, le client final ne peut plus la régler.
"2026-07-31T23:59:59.000Z"
Impose la cryptomonnaie avec laquelle le client final doit régler la facture. Ex : USDT.TRC20, BTC, USDT.BEP20. Omis, le client choisit parmi les cryptomonnaies activées sur votre compte.
"USDT.TRC20"
Contenu descriptif de la facture : lignes de détail et note de bas de page.
Show child attributes
Show child attributes
Référence libre côté marchand (numéro de commande, identifiant ERP…). Reprise telle quelle dans les réponses de l'API, les webhooks et le tableau de bord.
255"facture-4821"
Langue de l'email et du widget envoyés au client final. Omis, hérite de la langue par défaut du marchand.
fr, en "en"
Quand false, la page de paiement de cette facture NE demande PAS au client de saisir ses informations (nom, email) : l'identité est déjà portée par la facture (customerName, customerEmail sont obligatoires) et le client va directement au paiement. Défaut true : la page collecte les informations.
false
Reverse automatiquement en fiat le paiement de cette facture, dès qu'il est complété — mêmes champs et mêmes règles que autoSettlement sur POST /v1/payment-intents. La destination est vérifiée à la création de la facture (erreur AUTO_SETTLEMENT_… immédiate). Si elle devient inutilisable avant que le client paie (compte révoqué…), le paiement est encaissé normalement et reste sur votre solde. En modification, null désactive le reversement automatique.
Show child attributes
Show child attributes
Réponse
Facture mise à jour.
Identifiant unique de la facture.
Email du client destinataire.
Nom du client destinataire.
Montant facturé — chaîne décimale (preserve la précision).
Code de la devise (fiat ou crypto).
Code de l'actif crypto suggéré pour le paiement (optionnel).
Description libre affichée au client (optionnelle).
Métadonnées libres attachées à la facture, dont la liste des articles lorsqu'elle est détaillée.
Statut courant de la facture (draft, sent, paid, expired, cancelled).
Identifiant de l'intention de paiement liée si la facture a été payée.
Date d'expiration — ISO 8601. null si pas d'échéance.
Date de création — ISO 8601.
Lien public que le client peut utiliser pour payer la facture.