Introducción
LaSecretCryptos APIproporciona acceso seguro, simple y consistente a nuestrosMezcladoryIntercambioservicios. Este documento "Lite" se centra en los puntos finales principales para que pueda comenzar rápidamente.
URL base: https://api.secretcryptos.com/v1
Ejemplo: GET /v1/ping – pruébelo
También puede explorar la página raíz activa enapi.secretcryptos.com.
Más enlaces:Centro de enlaces • API Documentos (IU Swagger) • Organización GitHub.
Autenticación
- Encabezado:
Authorization: Bearer YOUR_API_KEY - Todas las solicitudes deben usar HTTPS.
Obtener clave API
- Cree una cuenta o inicie sesión enPartner.
- Abra el menú superior y haga clic en la pestañaAPI.
- Copiar suAPI-KEY(manténgala en secreto; funciona tanto para Mixer como para Exchange).
Seguridad de claves API
cURL (del lado del servidor)
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
Versión y verificación de estado simple.
GET https://api.secretcryptos.com/v1/ping
{
"ok": true,
"service": "SecretCryptos API",
"version": "1.2.6",
"ts": 1723800000
}
ts: época de Unix (segundos).- No se requiere autenticación.
MIXER
LaMixer APIle permite crear mediante programación transacciones que preservan la privacidad. Usted define lamoneda, red, cantidad, y una o másdirecciones de salidacon porcentajes compartidos y retrasos opcionales. Asignamos una dirección de depósito y le devolvemos un plan completo (tarifas + salidas) para que pueda automatizar recibos, pagos o flujos similares a depósitos en garantía.
- Casos de uso: recepción de pagos segura, reparto de ingresos automatizado, pagos a múltiples billeteras, desembolsos retrasados.
- Obtenga límites y tarifas a través de
/v1/meta/mixerantes de crear pedidos. - All monetary fields are incoin unitsunless noted.
- All timestamps are Unix epoch seconds (timezone: GMT-3 on server).
MIXER / Create Order
Create a new mixer order. You provide the coin, network, amount, and one or more output addresses with percentages and delays. The system allocates a deposit address and returns order details including fees and output plan.
Validation Rules
amount: Must be between coin-specificmin_amountandmax_amountfrom/v1/meta/mixer.addresses: 1–10 outputs.percent:- Format: up to 2 decimals (e.g.,
10,10.5,10.50). - Per-address minimum:
≥ 1.00, maximum:≤ 100.00. - Total of all outputs must be exactly
100.00. - If there is only 1 output, its percent must be exactly
100.00.
- Format: up to 2 decimals (e.g.,
delay:- Accepts minutes (e.g.,
120) or label (e.g.,"2h 0m"). - Máximo:
48h(es decir,2880minutos).
- Accepts minutes (e.g.,
service_fee(anulación opcional):- Hasta 2 decimales.
- Rango:
0.10–5.00(%). Si se omite, se utiliza el valor predeterminado del sistema para la moneda.
address format: debe coincidir con la red seleccionada (por ejemplo, BTC Legacy/SegWit, ERC-200x…, TRC-20T…, SOL, etc.).destination_tag / memo: Opcional; requerido para algunas redes (por ejemplo, etiqueta XRP, nota TON).
Notas
expires_at: cuando la dirección de depósito expira (segundos de época).outputs[i].time: tiempo de salida planificado como segundos de época (basado endelay_minutes).- Use
?pretty=1para JSON legible por humanos durante las pruebas. - Tasa límites: límite diario predeterminado por clave API; niveles más altos disponibles (consulte “Límites de tarifas”).
Errores comunes
{
"ok": false,
"code": "BAD_REQUEST",
"message": "Sum of percents must be exactly 100.00"
}
BAD_REQUEST: cuerpo no válido, formato de dirección incorrecto, porcentaje que no es 2 decimal, tarifa fuera de rango, demora > 48 h, etc.AMOUNT_TOO_LOW / AMOUNT_TOO_HIGH: Infringe el mínimo/máximo por moneda.SERVICE_UNAVAILABLE: No hay dirección de depósito disponible para esa red.TOO_MANY_REQUESTS: Límite API diario alcanzado.UNAUTHORIZED / FORBIDDEN: Clave API no válida/deshabilitada.
Headers
Authorization: Bearer YOUR_API_KEYContent-Type: application/json
Solicitud Cuerpo
{
"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
}
Cuerpo de solicitud
{
"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: Lista de destinos de salida. Cada dirección debe tener los siguientes campos:address: La dirección de destino donde se envían los fondos.percent: El porcentaje del monto total que se enviará a esta dirección (por ejemplo,100para el monto total o50por la mitad).delay: La demora antes de que se procese la transacción. Se puede especificar en minutos (p. ej.,120) o en formato de texto (p. ej.,"2h 0m").destination_tag: este campo es obligatorio paraXRPyTONnetworks. If not required, it can be omitted or left empty (e.g.,"").
amount: The total amount in coin units to be transferred. Please use a dot as the decimal separator (e.g.,10.00000000).crypto/network: The coin and blockchain network (e.g.,btc/btcfor Bitcoin).partner: Optional but recommended. YourPARTNER KEYis available onPartnerunder the API tab (with your API-KEY). When used, you earn30% of the service fee.service_fee: Optional override for service fee in percent. If omitted, the system default applies. If provided, it must be a number between0.1and5(inclusive).qrcode: Optional.1returns a Base64 data URL underdeposit.qr_code;0or omitted returns no QR code.destination_tag: Requerido paraXRPyTONredes. Si no es necesario, se puede omitir o dejar vacío ("").
Cómo usar el código QR
Cuandoqrcodese establece en1, la respuesta incluirá una imagen codificada en Base64 bajo el campodeposit.qr_code. Este es un código QR completamente funcional que puede incrustar en su interfaz como una imagen, permitiendo a los usuarios escanearlo con sus aplicaciones de billetera. Aquí hay un ejemplo de cómo mostrarlo en una página web:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Scan to pay" />
Los usuarios pueden escanear el código QR con su aplicación de billetera preferida para completar instantáneamente la dirección de destino y el monto, facilitando una transacción rápida y segura.
Respuesta
{
"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: Identificador de pedido único.deposit: Dónde el usuario debe enviar fondos.fees: Todo aplicado tarifas.outputs: Distribución planificada de fondos, con retrasos.timeyexpires_at: Marcas de tiempo Unix (zona horaria GMT-3).signature_text: Firma blindada digital para validación.
Ejemplo de 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);
EXCHANGE
TheExchange APIlets you swap afrom_coin/ from_networkdeposit into a singleto_coin/ to_networkdestination address. We allocate a deposit address, compute a live quote (USD-based limits & fee applied), and return the full order object you can poll until funded and executed.
- Use cases: instant swaps at checkout, “deposit in X → receive Y”, off-ramp/on-ramp bridges between L1/L2s.
- Get pair limits & default fee via
/v1/meta/exchangebefore creating orders. - All monetary fields are incoin unitsunless noted; limits areUSD-based.
- All timestamps are Unix epoch seconds (server timezone GMT‑3).
EXCHANGE / Create Order
Create a new exchange order. You provide thefrom_* lado (moneda/red/cantidad) y el destinoto_addresspara el ladoto_* . Devolvemos una dirección de depósito enfrom_network, una cotización y la salida planificada.
Reglas de validación
amount: el valor en USD (cantidad × precio de_moneda) debe estar dentro del par específicomin_usd/max_usdfrom/v1/meta/exchange.address format: debe coincidir con elto_networkseleccionado (por ejemplo, ERC‑200x…, TRC‑20T…, BTC, DOGE, SOL, etc.).destination_tag / memo: Opcional pero requerido por algunas redes (por ejemplo,XRPtag,TONmemo).service_fee(opcional, porcentaje):- Hasta 2 decimales (por ejemplo,
0.6=0.60%). - Pinza global: mín.
0.50%, max3.00%. - Si se proporciona debajo del valor predeterminado del sitio para ese par, se aplica el valor predeterminado del sitio. Si es arriba
3.00%, tiene un límite de3.00%. - Si se omite, tarifa efectiva =
max(site_default, 0.50%).
- Hasta 2 decimales (por ejemplo,
Notas
quote.final_usd= (cantidad × del precio) × (1 − tarifa%).quote.to.estimated_receive=final_usd÷ to_coinprecio.receive.delay_label: Retraso planificado antes de enviar el intercambio (predeterminado0h 10m).expires_at: ventana de depósito para la dirección asignada.- Use
?pretty=1para JSON con una bonita impresión durante la prueba.
Encabezados
Authorization: Bearer YOUR_API_KEYContent-Type: application/json
Cuerpo de solicitud
{
"from_coin": "eth",
"from_network": "eth",
"to_coin": "doge",
"to_network": "doge",
"to_address": "DLPaeuaJi2JLUcvYHD4ddLxadwnGaVSt4p",
"amount": "1.00000000",
"service_fee": 0.6, // optional; %0.60 → clamped by rules "partner": "YOUR_PARTNER_KEY", // optional, earns 30% of platform fee "qrcode": 1 // optional; adds base64 QR at deposit.qr_code}
Cuerpo de solicitud (XRP) / TON ejemplos)
{
"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"
}
Respuesta
{
"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,..." // only if 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: Identificador de pedido único para sondear el estado.deposit: Where the user must sendfrom_coin.quote: Pricing snapshot and effective fee.receive/outputs: Planned swap output details.
PHP Example
<?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);
How to Use the QR Code
Whenqrcodeis set to1in Create, the response includes a Base64-encoded QR underdeposit.qr_code. Embed it directly as an <img> to let users scan the deposit address.
<img src="data:image/png;base64,..." alt="Scan to pay" />
Prices
Retrieve the latest market prices inUSDfor supported cryptocurrencies. You can query multiple symbols at once by separating them with commas.
Endpoint
Query Parameters
symbols(optional): Comma-separated list of coin symbols (e.g.,BTC,ETH,USDT). Si se omite, se devuelven todas las monedas admitidas.
Respuesta
ok:truesi la solicitud fue exitosa.base: SiempreUSD.ts: marca de tiempo Unix (segundos).prices: mapeo de objetosSYMBOL → "price"(números de cadena).
Solicitud de ejemplo (solo 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);
Solicitud de ejemplo (todos los símbolos)
<?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);
Respuesta de ejemplo
{
"ok": true,
"base": "USD",
"ts": 1755600000,
"prices": {
"BTC": "117799.51713382",
"ETH": "4409.46254479",
"USDT": "1.0005594"
}
}
Códigos de error
BAD_REQUEST: no válidosymbolsformato.UNAUTHORIZED / FORBIDDEN: clave API no válida o falta.SERVER_ERROR: servidor/base de datos interno error.
Notas
- Los tickers no admitidos simplemente se omiten del objeto
prices. - Los valores numéricos se devuelven como cadenas para preservar la precisión.
Estado del pedido
Use a single endpoint to check the status of bothmixerandexchangeorders. You can explicitly set the order type (mixer/ exchange) or let the API auto-detect it.
Endpoint
Request Body
trackcode(required): The 16-character uppercase tracking code of the order.type(optional):mixer|exchange. If omitted, API will attempt to auto-detect.outputs(optional):none|summary|full(default:summary).mask_addresses(optional):true=mask addresses (default),false=return full addresses.
Respuesta
type:mixeroexchange.deposit.confirm_status: Estado de confirmación del depósito:0: No se recibió ningún pago.1: Pago recibido pero aún pendiente (ya sea en espera de confirmaciones o aún no completamente financiado).2: Depósito completamente confirmado y financiado.
deposit.delete_in_sec: Segundos restantes hasta la retención de 48 horas caducidad.deposit.fundingblock:waiting_balance: monto total esperado.received_balance: monto recibido hasta el momento.remaining_need: monto restante necesario.is_fully_funded: si está completamente financiado.can_start: soloverdadero siconfirm_status==2ANDis_fully_funded==true.
outputs:none: no devuelto.summary: Devuelvecount,sent_count,sent_total.full: Para cada salida:index,address(enmascarado o no),destination_tag,coin,network,share_percent,delay_label,delay_seconds,state,confirm,tx,amount,left_seconds.
status_reason: p.e."INSUFFICIENT_FUNDS"(si no está totalmente financiado).
Reglas comerciales
- Los pedidos no comenzarána menos que esté completamente financiado (
is_fully_funded=false): las salidas permanecen sin asignar y no se genera ningún pago a los socios. - Si
confirm_status==2ANDis_fully_funded==true:- Las salidas tienen una marca de tiempo una vez y permanecen consistentes en repetidas ocasiones. cheques.
- Las ganancias de los afiliados se acreditan una sola vez cuando el pedido se vuelve válido.
Solicitud de ejemplo (PHP)
// Mixer example (full outputs, unmasked addresses)<?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);
Respuesta de ejemplo: financiación completa
{
"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
}
]
}
Respuesta de ejemplo: financiación insuficiente
{
"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"
}
}
Explicación de salidas
index: Número de salida secuencial en el pedido.address: Destino dirección donde se envían los fondos.destination_tag: Etiqueta/nota opcional para XRP, XLM, etc. (nullsi no es necesario).coin: Código de criptomoneda de la salida (por ejemplo,btc,eth).network: Nombre de red utilizado para la transferencia (por ejemplo,btc,eth).share_percent: Porcentaje del depósito total asignado a esta salida.delay_label: Etiqueta legible por humanos que muestra cuándo se procesará esta salida (por ejemplo,2h 0m).delay_seconds: Retraso en segundos hasta que la salida pueda comenzar a procesarse.state: Estado de salida:0→ Esperando (depósito aún no completo confirmada).1→ Procesamiento (programado; comienza cuandodelay_secondsllega a 0).2→ Completado (transferencia finalizada).
confirm: Estado de confirmación de transferencia (solo relevante enstate=2):0→ Transacción transmitida pero aún no confirmada (pendiente).1→ Transacción confirmada (al menos 1 blockchain confirmación).
tx: Hash de transacción de Blockchain para esta salida.amount: Cantidad enviada a esta dirección de salida.left_seconds: Segundos restantes hasta la hora de envío programada.
Nota:Esta cuenta regresiva se reinicia una vezdeposit.confirm_status=2(completamente confirmado). Ejemplo: si600segundos (10 minutos), comienza la cuenta regresiva solo después de la confirmación del depósito.
Nota:Los datos de pago y salida se actualizan cada ~1 minuto.
Códigos de error
BAD_REQUEST: faltante/no válidotrackcode, cuerpo de solicitud mal formado.NOT_FOUND: pedido no encontrado.UNAUTHORIZED / FORBIDDEN: API clave no válida o deshabilitada.TOO_MANY_REQUESTS: límite de solicitudes diarias excedido.SERVER_ERROR: error inesperado del servidor.
mask_addresses: controlado pormask_addresses(predeterminado:true).delay_seconds: equivalente numérico dedelay_label(solo devuelto en modofull).
Eliminar Pedido
Eliminar un pedido existente para que ya no se pueda acceder a él a través de la API. Una vez eliminado, el pedido no estará disponible permanentemente para más consultas.
Endpoint
Cuerpo de la solicitud
trackcode(obligatorio): el código de seguimiento en mayúsculas de 16 caracteres.type(opcional):mixer|exchange. Si se omite, la detección es automática.
Respuesta
ok:trueen caso de éxito.trackcode: Eco del código de seguimiento solicitado.type: El tipo de pedido (mixeroexchange).deleted:truesi el pedido ha sido eliminado.
Comportamiento
- Si el pedido ya está eliminado o no se encuentra, la API devuelve404 NOT_FOUND.
- Si se proporciona
type, solo se marca ese tipo; de lo contrario, la detección es automática.
Solicitud de ejemplo (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);
Respuesta de ejemplo: Éxito
{
"ok": true,
"trackcode": "D391FC08747E7B04",
"type": "exchange",
"deleted": true
}
Ejemplo de respuesta: no encontrada
{
"ok": false,
"code": "NOT_FOUND",
"message": "Order not found or already deleted"
}
Códigos de error
BAD_REQUEST: no válidotrackcodeotype.NOT_FOUND: pedido no encontrado o ya eliminado.UNAUTHORIZED / FORBIDDEN: clave API no válida o falta.SERVER_ERROR: error interno del servidor.
Validación de firma
Validar una carga útil firmada digitalmente (Carta de Firma de garantía). Tras el descifrado exitoso, la API devuelve un subconjunto verificado de los detalles del pedido relacionado (mezclador o intercambio), adecuado para verificaciones del lado del cliente y visualización de estado.
Endpoint
Cuerpo de solicitud
signature(obligatorio): el bloque de firma digital, ya sea Base64 sin formato o con Líneas COMIENZO/FIN.
Respuesta
ok:trueen caso de éxito.message: Mensaje de estado legible por humanos.type:mixer|exchange.route: Para mezclador:confirm|deposit|mixing. Para intercambio:exc-deposit|exc-send.trackcode: Código de seguimiento resuelto.order:deposit_address(cadena)service_fee(cadena, 2 decimales)coin(cadena)network(cadena)waiting_balance(cadena, 8 decimales)created_at(entero, marca de tiempo Unix)
outputs(matriz):coin,network,address,destination_tagshare_percent(cadena, 2 decimales)delay_minutes(entero),delay_label(por ejemplo,2h 0m)amount(cadena, 8 decimales)
outputs_count(entero)
Comportamiento
- La firma digital proporcionada se valida con el sistema.
- Solo los pedidos recientes (dentro de las 48 horas) son elegibles para la validación. Los pedidos más antiguos es posible que se haya eliminado automáticamente.
- Si no se encuentra ningún pedido válido, la API responde con404 NOT_FOUND.
Solicitud de ejemplo (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);
Respuesta de ejemplo: Éxito
{
"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
}
Ejemplo de respuesta: errores
{
"ok": false,
"error": "BAD_REQUEST",
"message": "Digital signature is required"
}
---
{
"ok": false,
"error": "INVALID_SIGNATURE",
"message": "The provided data is not valid Base64 or is too short"
}
---
{
"ok": false,
"error": "DECRYPTION_FAILED",
"message": "Decryption failed. Ensure that the provided signature is valid and retry."
}
---
{
"ok": false,
"error": "MISSING_TRACKCODE",
"message": "Trackcode is required in the signature payload."
}
---
{
"ok": false,
"error": "NOT_FOUND",
"message": "The requested order details could not be found."
}
Códigos de error
BAD_REQUEST: Faltasignatureo carga útil con formato incorrecto.INVALID_SIGNATURE: Base64 no válido o el bloque de firma es demasiado corto.DECRYPTION_FAILED: Error de descifrado AES-GCM.INVALID_PAYLOAD: La carga útil descifrada no es JSON válido.MISSING_TRACKCODE:trackEl campo está ausente en carga útil.NOT_FOUND: pedido no encontrado en las últimas 48 horas.UNAUTHORIZED / FORBIDDEN: clave API no válida o falta.SERVER_ERROR: error interno del servidor.
Notas
- Precisión numérica:
waiting_balanceyamount→ 8 decimales (cadena),share_percent→ 2 decimales (cadena),service_fee→ 2 decimales (cadena). - Retrasos: se devuelven tanto la etiqueta humana (
delay_label) como los minutos legibles por máquina (delay_minutes).