curl --request POST \
--url https://api.pay.izichange.com/v1/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Abonnement Pro",
"amount": "30000",
"currency": "XOF",
"permanentLinkSlug": "abonnement-pro",
"description": "Accès illimité pendant 12 mois, 5 utilisateurs inclus.",
"assetCode": "USDT.TRC20",
"imageUrl": "https://cdn.example.com/produits/abonnement-pro.png",
"merchantReference": "SKU-PRO-12M",
"autoSettlement": {
"enabled": true,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
'import requests
url = "https://api.pay.izichange.com/v1/products"
payload = {
"name": "Abonnement Pro",
"amount": "30000",
"currency": "XOF",
"permanentLinkSlug": "abonnement-pro",
"description": "Accès illimité pendant 12 mois, 5 utilisateurs inclus.",
"assetCode": "USDT.TRC20",
"imageUrl": "https://cdn.example.com/produits/abonnement-pro.png",
"merchantReference": "SKU-PRO-12M",
"autoSettlement": {
"enabled": True,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
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({
name: 'Abonnement Pro',
amount: '30000',
currency: 'XOF',
permanentLinkSlug: 'abonnement-pro',
description: 'Accès illimité pendant 12 mois, 5 utilisateurs inclus.',
assetCode: 'USDT.TRC20',
imageUrl: 'https://cdn.example.com/produits/abonnement-pro.png',
merchantReference: 'SKU-PRO-12M',
autoSettlement: {
enabled: true,
settlementAccountAddress: '+22501020304',
settlementPaymentMethodId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
})
};
fetch('https://api.pay.izichange.com/v1/products', 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/products",
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([
'name' => 'Abonnement Pro',
'amount' => '30000',
'currency' => 'XOF',
'permanentLinkSlug' => 'abonnement-pro',
'description' => 'Accès illimité pendant 12 mois, 5 utilisateurs inclus.',
'assetCode' => 'USDT.TRC20',
'imageUrl' => 'https://cdn.example.com/produits/abonnement-pro.png',
'merchantReference' => 'SKU-PRO-12M',
'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/products"
payload := strings.NewReader("{\n \"name\": \"Abonnement Pro\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"permanentLinkSlug\": \"abonnement-pro\",\n \"description\": \"Accès illimité pendant 12 mois, 5 utilisateurs inclus.\",\n \"assetCode\": \"USDT.TRC20\",\n \"imageUrl\": \"https://cdn.example.com/produits/abonnement-pro.png\",\n \"merchantReference\": \"SKU-PRO-12M\",\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Abonnement Pro\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"permanentLinkSlug\": \"abonnement-pro\",\n \"description\": \"Accès illimité pendant 12 mois, 5 utilisateurs inclus.\",\n \"assetCode\": \"USDT.TRC20\",\n \"imageUrl\": \"https://cdn.example.com/produits/abonnement-pro.png\",\n \"merchantReference\": \"SKU-PRO-12M\",\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/products")
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 \"name\": \"Abonnement Pro\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"permanentLinkSlug\": \"abonnement-pro\",\n \"description\": \"Accès illimité pendant 12 mois, 5 utilisateurs inclus.\",\n \"assetCode\": \"USDT.TRC20\",\n \"imageUrl\": \"https://cdn.example.com/produits/abonnement-pro.png\",\n \"merchantReference\": \"SKU-PRO-12M\",\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>",
"name": "<string>",
"description": {},
"amount": "<string>",
"currency": "<string>",
"assetCode": {},
"permanentLinkSlug": "<string>",
"imageUrl": {},
"isActive": true,
"paymentLink": "<string>",
"createdAt": "<string>"
}Créer un produit (lien de paiement permanent)
Crée un produit payable via un lien permanent identifié par permanentLinkSlug. Le slug doit être unique sur la plateforme et utiliser uniquement minuscules, chiffres et tirets. La devise doit être une devise fiat active.
curl --request POST \
--url https://api.pay.izichange.com/v1/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Abonnement Pro",
"amount": "30000",
"currency": "XOF",
"permanentLinkSlug": "abonnement-pro",
"description": "Accès illimité pendant 12 mois, 5 utilisateurs inclus.",
"assetCode": "USDT.TRC20",
"imageUrl": "https://cdn.example.com/produits/abonnement-pro.png",
"merchantReference": "SKU-PRO-12M",
"autoSettlement": {
"enabled": true,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
'import requests
url = "https://api.pay.izichange.com/v1/products"
payload = {
"name": "Abonnement Pro",
"amount": "30000",
"currency": "XOF",
"permanentLinkSlug": "abonnement-pro",
"description": "Accès illimité pendant 12 mois, 5 utilisateurs inclus.",
"assetCode": "USDT.TRC20",
"imageUrl": "https://cdn.example.com/produits/abonnement-pro.png",
"merchantReference": "SKU-PRO-12M",
"autoSettlement": {
"enabled": True,
"settlementAccountAddress": "+22501020304",
"settlementPaymentMethodId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
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({
name: 'Abonnement Pro',
amount: '30000',
currency: 'XOF',
permanentLinkSlug: 'abonnement-pro',
description: 'Accès illimité pendant 12 mois, 5 utilisateurs inclus.',
assetCode: 'USDT.TRC20',
imageUrl: 'https://cdn.example.com/produits/abonnement-pro.png',
merchantReference: 'SKU-PRO-12M',
autoSettlement: {
enabled: true,
settlementAccountAddress: '+22501020304',
settlementPaymentMethodId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
})
};
fetch('https://api.pay.izichange.com/v1/products', 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/products",
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([
'name' => 'Abonnement Pro',
'amount' => '30000',
'currency' => 'XOF',
'permanentLinkSlug' => 'abonnement-pro',
'description' => 'Accès illimité pendant 12 mois, 5 utilisateurs inclus.',
'assetCode' => 'USDT.TRC20',
'imageUrl' => 'https://cdn.example.com/produits/abonnement-pro.png',
'merchantReference' => 'SKU-PRO-12M',
'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/products"
payload := strings.NewReader("{\n \"name\": \"Abonnement Pro\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"permanentLinkSlug\": \"abonnement-pro\",\n \"description\": \"Accès illimité pendant 12 mois, 5 utilisateurs inclus.\",\n \"assetCode\": \"USDT.TRC20\",\n \"imageUrl\": \"https://cdn.example.com/produits/abonnement-pro.png\",\n \"merchantReference\": \"SKU-PRO-12M\",\n \"autoSettlement\": {\n \"enabled\": true,\n \"settlementAccountAddress\": \"+22501020304\",\n \"settlementPaymentMethodId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Abonnement Pro\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"permanentLinkSlug\": \"abonnement-pro\",\n \"description\": \"Accès illimité pendant 12 mois, 5 utilisateurs inclus.\",\n \"assetCode\": \"USDT.TRC20\",\n \"imageUrl\": \"https://cdn.example.com/produits/abonnement-pro.png\",\n \"merchantReference\": \"SKU-PRO-12M\",\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/products")
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 \"name\": \"Abonnement Pro\",\n \"amount\": \"30000\",\n \"currency\": \"XOF\",\n \"permanentLinkSlug\": \"abonnement-pro\",\n \"description\": \"Accès illimité pendant 12 mois, 5 utilisateurs inclus.\",\n \"assetCode\": \"USDT.TRC20\",\n \"imageUrl\": \"https://cdn.example.com/produits/abonnement-pro.png\",\n \"merchantReference\": \"SKU-PRO-12M\",\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>",
"name": "<string>",
"description": {},
"amount": "<string>",
"currency": "<string>",
"assetCode": {},
"permanentLinkSlug": "<string>",
"imageUrl": {},
"isActive": true,
"paymentLink": "<string>",
"createdAt": "<string>"
}Autorisations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Corps
Nom du produit, affiché au client final sur sa page de paiement.
"Abonnement Pro"
Prix du produit, 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 le produit est libellé. Ex : XOF, EUR, USD.
"XOF"
Slug de l'URL publique du produit — le lien de paiement permanent que vous partagez. Uniquement des minuscules, des chiffres et des tirets. Doit être unique sur votre compte.
^[a-z0-9-]+$"abonnement-pro"
Description du produit, affichée sous son nom sur la page de paiement.
"Accès illimité pendant 12 mois, 5 utilisateurs inclus."
Impose la cryptomonnaie avec laquelle le client final doit régler ce produit. Ex : USDT.TRC20, BTC, USDT.BEP20. Omis, le client choisit parmi les cryptomonnaies activées sur votre compte.
"USDT.TRC20"
URL d'une image illustrant le produit sur sa page de paiement.
"https://cdn.example.com/produits/abonnement-pro.png"
Référence libre côté marchand (SKU, identifiant ERP…). Reprise telle quelle dans les réponses de l'API, les webhooks et le tableau de bord.
255"SKU-PRO-12M"
Reverse automatiquement en fiat CHAQUE paiement fait par ce lien produit — mêmes champs et mêmes règles que autoSettlement sur POST /v1/payment-intents. La destination est vérifiée à la création du produit. Si elle devient inutilisable plus tard (compte révoqué…), les paiements sont encaissés normalement et restent sur votre solde.
Show child attributes
Show child attributes
Réponse
Produit créé.
Identifiant unique du produit.
Nom du produit affiché au client.
Description longue affichée sur la page de paiement.
Prix du produit — chaîne décimale.
Code de la devise (fiat ou crypto).
Code de l'actif crypto suggéré pour le paiement (optionnel).
Slug utilisé pour construire le lien de paiement permanent (uniquement minuscules, chiffres et tirets).
URL d'une image illustrant le produit (optionnelle).
Indique si le produit est actif et payable.
Lien permanent à partager pour vendre ce produit.
Date de création — ISO 8601.