Introduction
L’API SecretCryptos offre un accès sécurisé, simple et cohérent à nos services Mixer et Exchange. Ce document « Lite » se concentre sur les endpoints essentiels pour vous permettre de démarrer rapidement.
URL de base : https://api.secretcryptos.com/v1
Exemple : GET /v1/ping
– essayez-le
Vous pouvez également explorer la page racine en direct sur api.secretcryptos.com.
Plus de liens : Hub de liens • Documentation de l’API (Swagger UI) • Organisation GitHub.
Authentification
- En-tête :
Authorization: Bearer VOTRE_CLE_API
- Toutes les requêtes doivent utiliser HTTPS.
Obtenir une clé API
- Créez un compte ou connectez-vous sur Partner.
- Ouvrez le menu supérieur et cliquez sur l’onglet API.
- Copiez votre API-KEY (gardez-la secrète ; elle fonctionne à la fois pour Mixer et Exchange).
Sécurité de la clé API
cURL (côté serveur)
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.secretcryptos.com/v1/meta/mixer"
Proxy PHP
<?php $ch = curl_init("https://api.secretcryptos.com/v1/meta/exchange"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]); echo curl_exec($ch);
Node.js (Express)
import express from "express"; import fetch from "node-fetch"; const app = express(); app.get("/api/meta/exchange", async (req, res) => { const r = await fetch("https://api.secretcryptos.com/v1/meta/exchange", { headers: { Authorization: "Bearer " + process.env.SECRETCRYPTOS_API_KEY } }); res.status(r.status).type("application/json").send(await r.text()); }); app.listen(3000);
Python (Flask)
from flask import Flask, Response import os, requests app = Flask(__name__) @app.get("/api/meta/mixer") def mixer_meta(): r = requests.get( "https://api.secretcryptos.com/v1/meta/mixer", headers={"Authorization": f"Bearer {os.environ['SECRETCRYPTOS_API_KEY']}"} ) return Response(r.content, status=r.status_code, mimetype="application/json")
Ping
Vérification simple de l’état et version.
GET https://api.secretcryptos.com/v1/ping
{ "ok": true, "service": "SecretCryptos API", "version": "1.2.6", "ts": 1723800000 }
ts
: époque Unix (secondes).- Aucune authentification requise.
MIXER
L’API Mixer vous permet de créer de manière programmatique des transactions préservant la confidentialité. Vous définissez la crypto, le réseau, le montant et une ou plusieurs adresses de sortie avec des pourcentages et des délais optionnels. Nous attribuons une adresse de dépôt et renvoyons un plan complet (frais + sorties) afin que vous puissiez automatiser les encaissements, les paiements ou des flux de type séquestre.
- Cas d’utilisation : encaissement sécurisé de paiements, partage automatisé des revenus, paiements vers plusieurs portefeuilles, décaissements différés.
- Récupérez les limites et frais via
/v1/meta/mixer
avant de créer des commandes. - Tous les champs monétaires sont exprimés en unités de crypto, sauf indication contraire.
- Tous les timestamps sont en secondes depuis l’époque Unix (fuseau horaire : GMT-3 sur le serveur).
MIXER / Créer une commande
Créer une nouvelle commande mixer. Vous fournissez la crypto, le réseau, le montant et une ou plusieurs adresses de sortie avec pourcentages et délais. Le système attribue une adresse de dépôt et renvoie les détails de la commande, y compris les frais et le plan de distribution.
Règles de validation
amount
: Doit être compris entremin_amount
etmax_amount
spécifiques à la crypto depuis/v1/meta/mixer
.addresses
: 1–10 sorties.percent
:- Format : jusqu’à 2 décimales (ex. :
10
,10.5
,10.50
). - Minimum par adresse :
≥ 1.00
, maximum :≤ 100.00
. - Le total de toutes les sorties doit être exactement
100.00
. - S’il n’y a qu’une seule sortie, son pourcentage doit être exactement
100.00
.
- Format : jusqu’à 2 décimales (ex. :
delay
:- Accepte les minutes (ex. :
120
) ou les libellés (ex. :"2h 0m"
). - Maximum :
48h
(soit2880
minutes).
- Accepte les minutes (ex. :
service_fee
(remplacement optionnel):- Jusqu’à 2 décimales.
- Plage :
0.10
–5.00
(%). Si omis, la valeur par défaut du système pour la crypto est utilisée.
format d’adresse
: Doit correspondre au réseau sélectionné (ex. : BTC legacy/SegWit, ERC-200x…
, TRC-20T…
, SOL, etc.).destination_tag / memo
: Optionnel ; requis pour certains réseaux (ex. : tag XRP, memo TON).
Notes
expires_at
: Moment où l’adresse de dépôt expire (secondes Unix).outputs[i].time
: Heure de sortie planifiée en secondes Unix (selondelay_minutes
).- Utilisez
?pretty=1
pour obtenir du JSON lisible par l’humain lors des tests. - Limites de taux : limite quotidienne par clé API par défaut ; niveaux supérieurs disponibles (voir « Limites de taux »).
Erreurs courantes
{ "ok": false, "code": "BAD_REQUEST", "message": "Sum of percents must be exactly 100.00" }
BAD_REQUEST
: Corps invalide, mauvais format d’adresse, pourcentage non à 2 décimales, frais hors plage, délai > 48h, etc.AMOUNT_TOO_LOW / AMOUNT_TOO_HIGH
: Violations du min/max par crypto.SERVICE_UNAVAILABLE
: Aucune adresse de dépôt disponible pour ce réseau.TOO_MANY_REQUESTS
: Limite quotidienne de l’API atteinte.UNAUTHORIZED / FORBIDDEN
: Clé API invalide/désactivée.
En-têtes
Authorization: Bearer VOTRE_API_KEY
Content-Type: application/json
Corps de la requête
{ "action": "create_order", "addresses": [ { "address": "35iMHbUZeTssxBodiHwEEkb32jpBfVueEL", "percent": "84.93", "delay": "0", }, { "address": "1P279UBChDFPAky8S4DcKGaaxKEMYBK9MM", "percent": "15.07", "delay": "120", } ], "amount": "10.00000000", "crypto": "btc", "network": "btc", "partner": "YOUR_PARTNER_KEY", "service_fee": 0.45, "qrcode": 1 }
Corps de la requête
{ "action": "create_order", "addresses": [ { "address": "raGXwk3P9yCtT2mGKD7nQdRNDCPSgwb2Kb", "percent": "100", "delay": "0", "destination_tag": "435757008" } ], "amount": "10.00000000", "crypto": "btc", "network": "btc", "partner": "YOUR_PARTNER_KEY", "service_fee": 0.45, "qrcode": 1 }
addresses
: Liste des destinations de sortie. Chaque adresse doit contenir les champs suivants :address
: L’adresse de destination où les fonds sont envoyés.percent
: Le pourcentage du montant total à envoyer à cette adresse (ex. :100
pour la totalité ou50
pour la moitié).delay
: Le délai avant que la transaction ne soit traitée. Il peut être spécifié en minutes (ex. :120
) ou en format texte (ex. :"2h 0m"
).destination_tag
: Ce champ est requis pour les réseaux XRP et TON. S’il n’est pas requis, il peut être omis ou laissé vide (ex. :""
).
amount
: Le montant total en unités de crypto à transférer. Veuillez utiliser un point comme séparateur décimal (ex. :10.00000000
).crypto
/network
: La crypto et le réseau blockchain (ex. :btc
/btc
pour Bitcoin).partner
: Optionnel mais recommandé. Votre PARTNER KEY est disponible sur Partner sous l’onglet API (avec votre API-KEY). Lorsqu’elle est utilisée, vous gagnez 30% des frais de service.service_fee
: Surcharge optionnelle pour les frais de service en pourcentage. Si omis, la valeur par défaut du système s’applique. Si fournie, elle doit être comprise entre 0.1 et 5 (inclus).qrcode
: Optionnel.1
renvoie une URL de données Base64 sousdeposit.qr_code
;0
ou omis ne renvoie pas de QR code.destination_tag
: Requis pour les réseaux XRP et TON. Si non nécessaire, il peut être omis ou laissé vide ("").
Comment utiliser le QR code
Lorsque qrcode
est défini sur 1
, la réponse inclut une image encodée en Base64 dans le champ deposit.qr_code
. C’est un QR code entièrement fonctionnel que vous pouvez intégrer dans votre frontend comme une image, permettant aux utilisateurs de le scanner avec leurs applications de portefeuille. Voici un exemple d’affichage sur une page web :
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Scanner pour payer" />
Les utilisateurs peuvent scanner le QR code avec leur application de portefeuille préférée pour remplir instantanément l’adresse de destination et le montant, facilitant une transaction rapide et sécurisée.
Réponse
{ "ok": true, "trackcode": "6A5FB3BA8A150EC9", "maintenance": 0, "deposit": { "address": "31wXuLH5AKBWoZsK4VJS5wG75nTUAWYnWf", "name": "Bitcoin", "symbol": "₿", "network": "btc", "network_label": "Bitcoin (BTC)", "deposit_amount": "10.00000000", "min_amount": 0.001, "max_amount": 20, "expires_at": 1755614593, "qr_code": "data:image/png;base64,iVBORw0....." }, "fees": { "service_fee_percent": 0.45, "service_fee_value": "0.04500000", "fee_per_output": "0.00005000", "fee_outputs_total": "0.00010000", "fee_total": "0.04510000" }, "outputs": [ { "id": 1, "address": "35iMHbUZeTssxBodiHwEEkb32jpBfVueEL", "destination_tag": null, "share_percent": 84.93, "delay_minutes": 0, "delay_label": "0h 0m", "amount": "8.45469657", "time": 1755441793 }, { "id": 2, "address": "1P279UBChDFPAky8S4DcKGaaxKEMYBK9MM", "destination_tag": null, "share_percent": 15.07, "delay_minutes": 120, "delay_label": "2h 0m", "amount": "1.50020343", "time": 1755448993 } ], "signature_text": "...." }
trackcode
: Identifiant unique de la commande.deposit
: Où l’utilisateur doit envoyer les fonds.fees
: Tous les frais appliqués.outputs
: Distribution planifiée des fonds, avec délais.time
etexpires_at
: Timestamps Unix (fuseau GMT-3).signature_text
: Signature numérique blindée pour validation.
Exemple PHP
<?php $url = "https://api.secretcryptos.com/v1/mixer/orders"; $headers = [ "Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json" ]; $data = [ "action" => "create_order", "addresses" => [ ["address"=>"35iMHbUZeTssxBodiHwEEkb32jpBfVueEL", "percent"=>"84.93", "delay"=>"0"], ["address"=>"1P279UBChDFPAky8S4DcKGaaxKEMYBK9MM", "percent"=>"15.07", "delay"=>"120"] ], "amount" => "10.00000000", "crypto" => "btc", "network" => "btc", "partner" => "YOUR_PARTNER_KEY", "service_fee" => 0.45, ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data) ]); echo curl_exec($ch); curl_close($ch);
ÉCHANGE
L’API Exchange vous permet d’échanger un dépôt from_coin/ from_network contre une adresse de destination unique to_coin/ to_network. Nous attribuons une adresse de dépôt, calculons un devis en direct (basé sur l’USD avec limites et frais appliqués) et renvoyons l’objet complet de la commande que vous pouvez interroger jusqu’à ce qu’il soit financé et exécuté.
- Cas d’utilisation : swaps instantanés au paiement, « déposer en X → recevoir Y », passerelles off-ramp/on-ramp entre L1/L2.
- Obtenez les limites de paire et les frais par défaut via
/v1/meta/exchange
avant de créer des commandes. - Tous les champs monétaires sont en unités de crypto sauf indication contraire ; les limites sont basées sur l’USD.
- Tous les timestamps sont en secondes depuis l’époque Unix (fuseau serveur GMT-3).
ÉCHANGE / Créer une commande
Créer une nouvelle commande d’échange. Vous fournissez la partie from_*
(crypto/réseau/montant) et l’adresse de destination
pour la partie to_*
. Nous renvoyons une adresse de dépôt sur le from_network
, un devis et la sortie prévue.
Règles de validation
amount
: La valeur USD (montant × prix de la crypto source) doit être comprise dansmin_usd
/max_usd
spécifiques à la paire depuis/v1/meta/exchange
.format d’adresse
: Doit correspondre auto_network
sélectionné (ex. : ERC-200x…
, TRC-20T…
, BTC, DOGE, SOL, etc.).destination_tag / memo
: Optionnel mais requis par certains réseaux (ex. : tag XRP, memo TON).service_fee
(optionnel, pourcentage) :- Jusqu’à 2 décimales (ex. :
0.6
=0,60%
). - Plage globale : min
0,50%
, max3,00%
. - Si fourni en dessous de la valeur par défaut du site pour cette paire, la valeur par défaut s’applique. Si au-dessus de
3,00%
, elle est plafonnée à3,00%
. - Si omis, le frais effectif =
max(valeur_par_défaut_site, 0,50%)
.
- Jusqu’à 2 décimales (ex. :
Notes
quote.final_usd
= (montant × prix source) × (1 − frais%).quote.to.estimated_receive
=final_usd
÷ prix de la crypto cible.receive.delay_label
: Délai prévu avant l’envoi du swap (par défaut0h 10m
).expires_at
: Fenêtre de dépôt pour l’adresse attribuée.- Utilisez
?pretty=1
pour du JSON lisible pendant les tests.
En-têtes
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Corps de la requête
{ "from_coin": "eth", "from_network": "eth", "to_coin": "doge", "to_network": "doge", "to_address": "DLPaeuaJi2JLUcvYHD4ddLxadwnGaVSt4p", "amount": "1.00000000", "service_fee": 0.6, // optionnel ; %0,60 → limité par les règles "partner": "YOUR_PARTNER_KEY", // optionnel, rapporte 30% des frais de plateforme "qrcode": 1 // optionnel ; ajoute un QR Base64 dans deposit.qr_code}
Corps de la requête (exemples XRP / TON)
{ "from_coin": "usdt", "from_network": "trx", "to_coin": "xrp", "to_network": "xrp", "to_address": "rLWyHZwAhsVrHCu8ahsfQfb9w9w7A5WTrS", "destination_tag": "123456", "amount": "250" } --- { "from_coin": "btc", "from_network": "btc", "to_coin": "ton", "to_network": "ton", "to_address": "UQDTQmCrngsFMbgBhWNX_Sg6Ko3sXUcdeliM5OoZO2Pt4NJx", "memo": "MYMEMO123", "amount": "0.015" }
Réponse
{ "ok": true, "type": "exchange", "trackcode": "D391FC08747E7B04", "pair": { "from": "ETH_eth", "to": "DOGE_doge" }, "deposit": { "address": "0x7ed2bf650d12819171a8add77fe772a18dd77a10", "name": "Ethereum", "symbol": "Ξ", "network": "eth", "network_label": "Ethereum (ERC20)", "deposit_amount": "1.00000000", "min_usd": 100, "max_usd": 88565, "expires_at": 1755781843, "qr_code": "data:image/png;base64,..." // uniquement si qrcode=1 }, "quote": { "from": { "coin":"ETH","network":"eth","price_usd":4300.8836,"amount":"1.00000000","amount_usd":"4300.88362842" }, "to": { "coin":"DOGE","network":"doge","price_usd":0.22014648,"estimated_receive":"19419.24455241" }, "fee_percent": 0.6, "final_usd": "4275.07832665" }, "receive": { "address":"DLPaeuaJi2JLUcvYHD4ddLxadwnGaVSt4p", "destination_tag": null, "coin":"DOGE","network":"doge", "percent":100,"delay_minutes":10,"delay_label":"0h 10m", "amount":"19419.24455241","time":1755609642 }, "outputs":[ { "id":1, "address":"DLPaeuaJi2JLUcvYHD4ddLxadwnGaVSt4p", "destination_tag":null, "share_percent":100, "delay_minutes":10, "delay_label":"0h 10m", "amount":"19419.24455241", "time":1755609642 } ], "signature_text":"..." }
trackcode
: Identifiant unique de la commande à interroger.deposit
: Où l’utilisateur doit envoyer le from_coin.quote
: Instantané de prix et frais effectifs.receive
/outputs
: Détails prévus de la sortie du swap.
Exemple PHP
<?php $url = "https://api.secretcryptos.com/v1/exchange/orders"; $headers = [ "Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json" ]; $payload = [ "from_coin"=>"eth","from_network"=>"eth", "to_coin"=>"doge","to_network"=>"doge", "to_address"=>"DLPaeuaJi2JLUcvYHD4ddLxadwnGaVSt4p", "amount"=>"1.00000000", "service_fee"=>0.6, "partner"=>"YOUR_PARTNER_KEY", "qrcode"=>1 ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER=>true, CURLOPT_HTTPHEADER=>$headers, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>json_encode($payload, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES), ]); echo curl_exec($ch); curl_close($ch);
Comment utiliser le QR code
Lorsque qrcode
est défini sur 1
dans Create, la réponse inclut un QR encodé en Base64 sous deposit.qr_code
. Intégrez-le directement comme une image <img> pour permettre aux utilisateurs de scanner l’adresse de dépôt.
<img src="data:image/png;base64,..." alt="Scanner pour payer" />
Prix
Récupérez les derniers prix du marché en USD pour les cryptomonnaies prises en charge. Vous pouvez interroger plusieurs symboles à la fois en les séparant par des virgules.
Endpoint
Paramètres de requête
symbols
(optionnel) : Liste séparée par des virgules des symboles de crypto (ex. :BTC,ETH,USDT
). Si omis, toutes les cryptos prises en charge sont renvoyées.
Réponse
ok
:true
si la requête a réussi.base
: ToujoursUSD
.ts
: Timestamp Unix (secondes).prices
: Objet mappantSYMBOL → "price"
(nombres en chaîne).
Exemple de requête (seulement BTC, ETH)
<?php $url = "https://api.secretcryptos.com/v1/prices?symbols=" . urlencode("BTC,ETH"); $headers = [ "Authorization: Bearer <API_KEY>", ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_TIMEOUT => 20, ]); $result = curl_exec($ch); if ($result === false) { echo "cURL error: " . curl_error($ch); } else { echo $result; } curl_close($ch);
Exemple de requête (tous les symboles)
<?php $url = "https://api.secretcryptos.com/v1/prices"; $headers = [ "Authorization: Bearer <API_KEY>", ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_TIMEOUT => 20, ]); $result = curl_exec($ch); if ($result === false) { header("Content-Type: text/plain; charset=utf-8"); echo "cURL error: " . curl_error($ch); } else { header("Content-Type: application/json; charset=utf-8"); echo $result; } curl_close($ch);
Exemple de réponse
{ "ok": true, "base": "USD", "ts": 1755600000, "prices": { "BTC": "117799.51713382", "ETH": "4409.46254479", "USDT": "1.0005594" } }
Codes d’erreur
BAD_REQUEST
: Format desymbols
invalide.UNAUTHORIZED / FORBIDDEN
: Clé API invalide ou manquante.SERVER_ERROR
: Erreur interne du serveur/base de données.
Notes
- Les tickers non pris en charge sont simplement omis de l’objet
prices
. - Les valeurs numériques sont renvoyées sous forme de chaînes pour préserver la précision.
Statut de la commande
Utilisez un seul endpoint pour vérifier le statut des commandes mixer et exchange. Vous pouvez définir explicitement le type de commande (mixer
/ exchange
) ou laisser l’API le détecter automatiquement.
Endpoint
Corps de la requête
trackcode
(obligatoire) : Code de suivi en majuscules de 16 caractères de la commande.type
(optionnel) :mixer
|exchange
. Si omis, l’API tentera de détecter automatiquement.outputs
(optionnel) :none
|summary
|full
(par défaut :summary
).mask_addresses
(optionnel) :true
=masquer les adresses (par défaut),false
=renvoyer les adresses complètes.
Réponse
type
:mixer
ouexchange
.deposit.confirm_status
: Statut de confirmation du dépôt :0
: Aucun paiement reçu.1
: Paiement reçu mais encore en attente (en attente de confirmations ou pas encore totalement financé).2
: Dépôt entièrement confirmé et financé.
deposit.delete_in_sec
: Secondes restantes jusqu’à l’expiration de la rétention de 48 heures.- Bloc
deposit.funding
:waiting_balance
: Montant total attendu.received_balance
: Montant reçu jusqu’à présent.remaining_need
: Montant restant à recevoir.is_fully_funded
: Indique si le dépôt est entièrement financé.can_start
: seulement true siconfirm_status==2
ETis_fully_funded==true
.
outputs
:none
: Non renvoyé.summary
: Renvoiecount
,sent_count
,sent_total
.full
: Pour chaque sortie :index
,address
(masquée ou non),destination_tag
,coin
,network
,share_percent
,delay_label
,delay_seconds
,state
,confirm
,tx
,amount
,left_seconds
.
status_reason
: ex."INSUFFICIENT_FUNDS"
(si non totalement financé).
Règles métier
- Les commandes ne démarrent pas tant qu’elles ne sont pas totalement financées (
is_fully_funded=false
) : les sorties restent non attribuées et aucun gain partenaire n’est généré. - Si
confirm_status==2
ETis_fully_funded==true
:- Les sorties sont horodatées une seule fois et restent cohérentes lors des vérifications répétées.
- Les gains des affiliés sont crédités une seule fois lorsque la commande devient valide.
Exemple de requête (PHP)
// Exemple mixer (sorties complètes, adresses non masquées)<?php $url = "https://api.secretcryptos.com/v1/orders/check"; $headers = [ "Authorization: Bearer <API_KEY>", "Content-Type: application/json" ]; $data = [ "trackcode" => "554FEC10054743FD", "type" => "mixer", // mixer | exchange "outputs" => "full", // none | summary | full "mask_addresses" => false // true(default)=masked, false=full ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ]); $result = curl_exec($ch); if ($result === false) { header("Content-Type: text/plain; charset=utf-8"); echo "cURL error: " . curl_error($ch); } else { header("Content-Type: application/json; charset=utf-8"); echo $result; } curl_close($ch);
Exemple de réponse — entièrement financée
{ "ok": true, "type": "mixer", "trackcode": "6A5FB3BA8A150EC9", "deposit": { "confirm_status": 2, "coin": "btc", "network": "btc", "delete_in_sec": 167812, "funding": { "waiting_balance": "10.00000000", "received_balance": "10.00000000", "remaining_need": "0.00000000", "is_fully_funded": true, "can_start": true } }, "outputs": [ { "index": 1, "address": "35iMHbUZeTssxBodiHwEEkb32jpBfVueEL", "destination_tag": null, "coin": "btc", "network": "btc", "share_percent": 84.93, "delay_label": "0h 0m", "delay_seconds": 0, "state": 2, "confirm": 1, "tx": "135f451af7f894....fafb578eee9e9c4", "amount": "8.45469657", "left_seconds": 0 }, { "index": 2, "address": "1P279UBChDFPAky8S4DcKGaaxKEMYBK9MM", "destination_tag": null, "coin": "btc", "network": "btc", "share_percent": 15.07, "delay_label": "2h 0m", "delay_seconds": 7200, "state": 1, "confirm": 0, "tx": "", "amount": "1.50020343", "left_seconds": 5916 } ] }
Exemple de réponse — sous-financée
{ "ok": true, "type": "exchange", "trackcode": "A1B2C3D4E5F6A7B8", "deposit": { "confirm_status": 2, "coin": "usdt", "network": "erc20", "delete_in_sec": 14321, "funding": { "waiting_balance": "500.00000000", "received_balance": "420.00000000", "remaining_need": "80.00000000", "is_fully_funded": false, "can_start": false } }, "status_reason": "INSUFFICIENT_FUNDS", "outputs": { "count": 3, "sent_count": 0, "sent_total": "0.00000000" } }
Explication des sorties
index
: Numéro séquentiel de sortie dans la commande.address
: Adresse de destination où les fonds sont envoyés.destination_tag
: Tag/memo optionnel pour XRP, XLM, etc. (null
si non requis).coin
: Code de la cryptomonnaie de la sortie (ex. :btc
,eth
).network
: Nom du réseau utilisé pour le transfert (ex. :btc
,eth
).share_percent
: Pourcentage du dépôt total attribué à cette sortie.delay_label
: Libellé lisible indiquant quand cette sortie sera traitée (ex. :2h 0m
).delay_seconds
: Délai en secondes avant que la sortie puisse commencer à être traitée.state
: État de la sortie :0
→ En attente (dépôt pas encore confirmé).1
→ En cours (planifiée ; commence quanddelay_seconds
atteint 0).2
→ Terminé (transfert finalisé).
confirm
: Statut de confirmation du transfert (seulement pertinent sistate=2
) :0
→ Transaction diffusée mais pas encore confirmée (en attente).1
→ Transaction confirmée (au moins 1 confirmation blockchain).
tx
: Hash de transaction blockchain pour cette sortie.amount
: Montant envoyé à cette adresse de sortie.left_seconds
: Secondes restantes avant l’envoi prévu.
Remarque : Ce compte à rebours démarre uniquement lorsquedeposit.confirm_status=2
(entièrement confirmé). Exemple : si600
secondes (10 minutes) est défini, il commence après confirmation du dépôt.
Remarque : Les données de paiement et de sortie sont actualisées environ toutes les minutes.
Codes d’erreur
BAD_REQUEST
:trackcode
manquant/invalide, corps de requête mal formé.NOT_FOUND
: Commande introuvable.UNAUTHORIZED / FORBIDDEN
: Clé API invalide ou désactivée.TOO_MANY_REQUESTS
: Limite quotidienne de requêtes dépassée.SERVER_ERROR
: Erreur serveur inattendue.
mask_addresses
: contrôlé parmask_addresses
(par défaut :true
).delay_seconds
: équivalent numérique dedelay_label
(uniquement renvoyé en modefull
).
Supprimer une commande
Supprimez une commande existante afin qu’elle ne soit plus accessible via l’API. Une fois supprimée, la commande n’est plus disponible pour de futures requêtes.
Endpoint
Corps de la requête
trackcode
(obligatoire) : Code de suivi en majuscules de 16 caractères.type
(optionnel) :mixer
|exchange
. Si omis, détection automatique.
Réponse
ok
:true
en cas de succès.trackcode
: Écho du code de suivi demandé.type
: Type de commande (mixer
ouexchange
).deleted
:true
si la commande a été supprimée.
Comportement
- Si la commande est déjà supprimée ou introuvable, l’API renvoie 404 NOT_FOUND.
- Si
type
est fourni, seul ce type est vérifié ; sinon, détection automatique.
Exemple de requête (PHP)
<?php $url = "https://api.secretcryptos.com/v1/orders/delete"; $headers = [ "Authorization: Bearer <API_KEY>", "Content-Type: application/json" ]; $data = [ "trackcode" => "D391FC08747E7B04" // "type" => "exchange" ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), CURLOPT_TIMEOUT => 20, ]); $result = curl_exec($ch); if ($result === false) { echo "cURL error: " . curl_error($ch); } else { echo $result; } curl_close($ch);
Exemple de réponse — Succès
{ "ok": true, "trackcode": "D391FC08747E7B04", "type": "exchange", "deleted": true }
Exemple de réponse — Introuvable
{ "ok": false, "code": "NOT_FOUND", "message": "Order not found or already deleted" }
Codes d’erreur
BAD_REQUEST
:trackcode
outype
invalide.NOT_FOUND
: Commande introuvable ou déjà supprimée.UNAUTHORIZED / FORBIDDEN
: Clé API invalide ou manquante.SERVER_ERROR
: Erreur interne du serveur.
Validation de signature
Validez une charge utile signée numériquement (signature de Lettre de Garantie). En cas de déchiffrement réussi, l’API renvoie un sous-ensemble vérifié des détails liés à la commande (mixer ou exchange), adapté aux vérifications côté client et à l’affichage du statut.
Endpoint
Corps de la requête
signature
(obligatoire) : Bloc de signature numérique, soit en Base64 brut soit avec les lignes BEGIN/END.
Réponse
ok
:true
en cas de succès.message
: Message d’état lisible par l’humain.type
:mixer
|exchange
.route
: Pour mixer :confirm
|deposit
|mixing
. Pour exchange :exc-deposit
|exc-send
.trackcode
: Code de suivi résolu.order
:deposit_address
(chaîne)service_fee
(chaîne, 2 décimales)coin
(chaîne)network
(chaîne)waiting_balance
(chaîne, 8 décimales)created_at
(entier, timestamp Unix)
outputs
(tableau) :coin
,network
,address
,destination_tag
share_percent
(chaîne, 2 décimales)delay_minutes
(entier),delay_label
(ex.2h 0m
)amount
(chaîne, 8 décimales)
outputs_count
(entier)
Comportement
- La signature numérique fournie est validée par rapport au système.
- Seules les commandes récentes (dans les 48 heures) sont éligibles à la validation. Les anciennes commandes peuvent avoir été supprimées automatiquement.
- Si aucune commande valide n’est trouvée, l’API répond avec 404 NOT_FOUND.
Exemple de requête (PHP)
<?php $url = "https://api.secretcryptos.com/v1/validate"; $signatureBlock = <<<SIG -----BEGIN DIGITAL SIGNATURE----- eyJ0cmFjayI6ICJEMzkxRkMwODc0N0U3QjA0IiwgInR5cGUiOiAibWl4ZXIiLCAiZXh0cmEiOiAiLi4uIn0= -----END DIGITAL SIGNATURE----- SIG; $headers = [ "Authorization: Bearer <API_KEY>", "Content-Type: application/json", "Accept: application/json", ]; $payload = [ "signature" => $signatureBlock ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES), CURLOPT_TIMEOUT => 20, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, ]); $result = curl_exec($ch); if ($result === false) { header("Content-Type: text/plain; charset=utf-8"); echo "cURL error: " . curl_error($ch); } else { header("Content-Type: application/json; charset=utf-8"); echo $result; } curl_close($ch);
Exemple de réponse — Succès
{ "ok": true, "message": "The signature has been validated successfully.", "type": "mixer", "route": "deposit", "trackcode": "6A5FB3BA8A150EC9", "order": { "deposit_address": "31wXuLH5AKBWoZsK4VJS5wG75nTUAWYnWf", "service_fee": "0.45", "coin": "btc", "network": "btc", "waiting_balance": "10.00000000", "created_at": "1755698732" }, "outputs": [ { "coin": "btc", "network": "btc", "address": "35iMHbUZeTssxBodiHwEEkb32jpBfVueEL", "destination_tag": "", "share_percent": "84.93", "delay_minutes": 0, "delay_label": "0h 0m", "amount": "8.45469657" }, { "coin": "btc", "network": "btc", "address": "1P279UBChDFPAky8S4DcKGaaxKEMYBK9MM", "destination_tag": "", "share_percent": "15.07", "delay_minutes": 120, "delay_label": "2h 0m", "amount": "1.50020343" } ], "outputs_count": 2 }
Exemple de réponse — Erreurs
{ "ok": false, "error": "BAD_REQUEST", "message": "La signature numérique est requise" } --- { "ok": false, "error": "INVALID_SIGNATURE", "message": "Les données fournies ne sont pas un Base64 valide ou sont trop courtes" } --- { "ok": false, "error": "DECRYPTION_FAILED", "message": "Échec du déchiffrement. Assurez-vous que la signature fournie est valide et réessayez." } --- { "ok": false, "error": "MISSING_TRACKCODE", "message": "Le trackcode est requis dans la charge utile de la signature." } --- { "ok": false, "error": "NOT_FOUND", "message": "Les détails de la commande demandée n’ont pas pu être trouvés." }
Codes d’erreur
BAD_REQUEST
:signature
manquante ou charge utile mal formée.INVALID_SIGNATURE
: Base64 invalide ou bloc de signature trop court.DECRYPTION_FAILED
: Échec du déchiffrement AES-GCM.INVALID_PAYLOAD
: La charge utile déchiffrée n’est pas un JSON valide.MISSING_TRACKCODE
: Champtrack
absent dans la charge utile.NOT_FOUND
: Commande introuvable dans les dernières 48 heures.UNAUTHORIZED / FORBIDDEN
: Clé API invalide ou manquante.SERVER_ERROR
: Erreur interne du serveur.
Notes
- Précision numérique :
waiting_balance
etamount
→ 8 décimales (chaîne),share_percent
→ 2 décimales (chaîne),service_fee
→ 2 décimales (chaîne). - Délais : à la fois étiquette lisible (
delay_label
) et minutes lisibles par machine (delay_minutes
) sont renvoyés.