Chargement du centre de documentation de l’API...
MIXES EN DIRECT
MATIC
862 MATIC
MATIC Mixé · 1min écoulées
ETH
0.039000 ETH
ETH Mixé · 1min écoulées
DOT
60 DOT
DOT Mixé · 1min écoulées
BTC
0.023000 BTC
BTC Mixé · 1min écoulées
BTC
0.015000 BTC
BTC Mixé · 1min écoulées
ADA
508 ADA
ADA Mixé · 5min écoulées
USDT
1,129 USDT
USDT Mixé · 5min écoulées
TON
102.008901 TON
TON Mixé · 5min écoulées
TON
39.394381 TON
TON Mixé · 5min écoulées
LTC
9.833244 LTC
LTC Mixé · 10min écoulées
MATIC
862 MATIC
MATIC Mixé · 1min écoulées
ETH
0.039000 ETH
ETH Mixé · 1min écoulées
DOT
60 DOT
DOT Mixé · 1min écoulées
BTC
0.023000 BTC
BTC Mixé · 1min écoulées
BTC
0.015000 BTC
BTC Mixé · 1min écoulées
ADA
508 ADA
ADA Mixé · 5min écoulées
USDT
1,129 USDT
USDT Mixé · 5min écoulées
TON
102.008901 TON
TON Mixé · 5min écoulées
TON
39.394381 TON
TON Mixé · 5min écoulées
LTC
9.833244 LTC
LTC Mixé · 10min écoulées

Documentation de l’API SecretCryptos

Sécurisé. Rapide. Conçu pour les développeurs.
Interface de programmation
Intégrez les fonctions de mixage et d’échange crypto dans votre application ou service avec l’API officielle de SecretCryptos.
Documentation de l’API SecretCryptos pour une intégration crypto sécurisée Guide du développeur pour l’intégration de l’API SecretCryptos Référence API pour le mixage et l’échange crypto avec SecretCryptos

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/pingessayez-le

Vous pouvez également explorer la page racine en direct sur api.secretcryptos.com.

Plus de liens : Hub de liensDocumentation de l’API (Swagger UI)Organisation GitHub.

Authentification


  • En-tête : Authorization: Bearer VOTRE_CLE_API
  • Toutes les requêtes doivent utiliser HTTPS.
N’appelez jamais d’endpoints authentifiés depuis du JavaScript côté client. Conservez votre clé API sur le serveur et proxifiez la réponse vers le navigateur.

Obtenir une clé API


  1. Créez un compte ou connectez-vous sur Partner.
  2. Ouvrez le menu supérieur et cliquez sur l’onglet API.
  3. Copiez votre API-KEY (gardez-la secrète ; elle fonctionne à la fois pour Mixer et Exchange).

Sécurité de la clé API


N’appelez jamais d’endpoints authentifiés depuis du JavaScript côté client. Conservez votre clé API sur le serveur et proxifiez les réponses vers le navigateur.

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/v1/ping
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.

Meta


Découverte de base pour les endpoints meta disponibles.

GET/v1/meta
GET https://api.secretcryptos.com/v1/meta
{
  "ok": true,
  "version": "1.2.6",
  "server_time": {
    "iso": "2025-08-20T16:04:53+00:00",
    "unix": 1755705893
  },
  "docs": {
    "html": "https://secretcryptos.com/api"
  },
  "endpoints": [
    {
      "name": "Ping",
      "path": "/v1/ping",
      "method": "GET",
      "auth": false,
      "desc": "Vérification simple de l’état."
    },
    {
      "name": "Meta (Mixer)",
      "path": "/v1/meta/mixer",
      "method": "GET",
      "auth": true,
      "desc": "Coins/réseaux pris en charge et règles du mixer."
    },
    {
      "name": "Meta (Exchange)",
      "path": "/v1/meta/exchange",
      "method": "GET",
      "auth": true,
      "desc": "Paires de trading supportées et limites d’échange."
    },
    {
      "name": "Create Mixer Order",
      "path": "/v1/mixer/orders",
      "method": "POST",
      "auth": true,
      "desc": "Créer une nouvelle commande mixer."
    },
    {
      "name": "Create Exchange Order",
      "path": "/v1/exchange/orders",
      "method": "POST",
      "auth": true,
      "desc": "Créer une nouvelle commande d’échange."
    },
    {
      "name": "Check Order",
      "path": "/v1/orders/check",
      "method": "POST",
      "auth": true,
      "desc": "Consulter le statut d’une commande par trackcode."
    },
    {
      "name": "Delete Order",
      "path": "/v1/orders/delete",
      "method": "POST",
      "auth": true,
      "desc": "Supprimer une commande (si autorisé)."
    },
    {
      "name": "Prices",
      "path": "/v1/prices",
      "method": "GET",
      "auth": true,
      "desc": "Taux de change et prix actuels."
    },
    {
      "name": "Validate Signature",
      "path": "/v1/validate",
      "method": "POST",
      "auth": false,
      "desc": "Valider la signature d’une lettre de garantie numérique."
    }
  ]
}
		
  • Aucune authentification requise.

Meta / Mixer


Configuration du mixer par coin (min/max, étiquettes réseau, frais de service/par adresse, décimales, confirmations).

GET/v1/meta/mixer
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.secretcryptos.com/v1/meta/mixer"
{
  "ok": true,
  "mixer": {
    "BTC": {
      "name": "Bitcoin",
      "symbol": "₿",
      "service_fee": 0.1,
      "maintenance": 0,
      "per_address_fee": "0.00005000",
      "decimals": 8,
      "confirmations": 1,
      "networks": {
        "btc": {
          "label": "Bitcoin (BTC)",
          "min": 0.001,
          "max": 20
        }
      }
    }
  }
}
  • Auth requis :Authorization: Bearer VOTRE_CLE_API.
  • service_fee est un pourcentage (ex. : 0.1 = 0,1%).
  • per_address_fee est une chaîne à 8 décimales en unités de coin.

Meta / Exchange


Configuration de l’échange : maintenance, prix USD en temps réel et limites/frais par réseau.

GET/v1/meta/exchange
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.secretcryptos.com/v1/meta/exchange"
{
  "ok": true,
  "exchange": {
    "maintenance": 0,
    "prices_usd": {
      "BTC": "117799.51713382",
      "ETH": "4409.46254479",
      "USDT": "1.0005594",
	  ...
    },
    "outputs": {
      "BTC": {
        "name": "Bitcoin",
        "symbol": "₿",
        "networks": {
          "btc": {
            "label": "Bitcoin (BTC)",
            "min_usd": "100",
            "max_usd": "182520",
            "service_fee": "0.5"
          }
        }
      },
	  ...
    }
  }
}
  • Auth requis :Authorization: Bearer VOTRE_CLE_API.
  • service_fee est une chaîne en pourcentage (ex. : "0.5" = 0,5%).
  • prices_usd sont des valeurs en direct issues de la base de données.

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 entre min_amount et max_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.
  • delay:
    • Accepte les minutes (ex. : 120) ou les libellés (ex. : "2h 0m").
    • Maximum : 48h (soit 2880 minutes).
  • service_fee(remplacement optionnel):
    • Jusqu’à 2 décimales.
    • Plage : 0.105.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-20 0x…, TRC-20 T…, 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 (selon delay_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.
POST/v1/mixer/orders

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é ou 50 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 sous deposit.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 et expires_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 dans min_usd/ max_usd spécifiques à la paire depuis /v1/meta/exchange.
  • format d’adresse : Doit correspondre au to_network sélectionné (ex. : ERC-20 0x…, TRC-20 T…, 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%, max 3,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%).

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éfaut 0h 10m).
  • expires_at : Fenêtre de dépôt pour l’adresse attribuée.
  • Utilisez ?pretty=1 pour du JSON lisible pendant les tests.
POST/v1/exchange/orders

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

GET/v1/prices?symbols=BTC,ETH,DOGE

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 : Toujours USD.
  • ts : Timestamp Unix (secondes).
  • prices : Objet mappant SYMBOL → "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 de symbols 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

POST/v1/orders/check

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 ou exchange.
  • 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 si confirm_status==2 ET is_fully_funded==true.
  • outputs:
    • none : Non renvoyé.
    • summary : Renvoie count, 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 ET is_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 quand delay_seconds atteint 0).
    • 2 → Terminé (transfert finalisé).
  • confirm : Statut de confirmation du transfert (seulement pertinent si state=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 lorsque deposit.confirm_status=2 (entièrement confirmé). Exemple : si 600 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é par mask_addresses (par défaut : true).
  • delay_seconds : équivalent numérique de delay_label (uniquement renvoyé en mode full).

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

POST/v1/orders/delete

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 ou exchange).
  • 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 ou type 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

POST/v1/validate

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 : Champ track 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 et amount → 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.

Limites de taux


Limite : 1000 requêtes / jour / clé API.