Introducción
La API de SecretCryptos ofrece acceso seguro, simple y consistente a nuestros servicios de Mezclador y Exchange. Este documento “Lite” se centra en los endpoints principales para empezar rápidamente.
Base URL: https://api.secretcryptos.com/v1
Ejemplo: GET /v1/ping
– probarlo
También puedes explorar la página raíz en vivo en api.secretcryptos.com.
Más enlaces: Centro de enlaces • Documentación de la API (Swagger UI) • Organización de GitHub.
Autenticación
- Encabezado:
Authorization: Bearer YOUR_API_KEY
- Todas las solicitudes deben usar HTTPS.
Obtener API Key
- Crea una cuenta o inicia sesión en Partner.
- Abre el menú superior y haz clic en la pestaña API.
- Copia tu API-KEY (mantenla en secreto; funciona tanto para Mezclador como para Exchange).
Seguridad de la API Key
cURL (lado del servidor)
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.secretcryptos.com/v1/meta/mixer"
PHP proxy
<?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
Chequeo de estado simple y versión.
GET https://api.secretcryptos.com/v1/ping
{ "ok": true, "service": "SecretCryptos API", "version": "1.2.6", "ts": 1723800000 }
ts
: Época Unix (segundos).- No requiere autenticación.
MEZCLADOR
La API de Mezclador te permite crear transacciones con privacidad de manera programática. Defines la moneda, red, monto y una o más direcciones de salida con porcentajes y retrasos opcionales. Asignamos una dirección de depósito y devolvemos un plan completo (comisiones + salidas) para que puedas automatizar ingresos, pagos o flujos tipo escrow.
- Casos de uso: recepción de pagos segura, reparto automático de ingresos, pagos a múltiples wallets, desembolsos con retraso.
- Consulta límites y comisiones vía
/v1/meta/mixer
antes de crear órdenes. - Todos los campos monetarios están en unidades de moneda salvo que se indique lo contrario.
- Todas las marcas de tiempo están en segundos de época Unix (zona horaria: GMT-3 en el servidor).
MEZCLADOR / Crear Orden
Crear una nueva orden de mixer. Proporcionas la moneda, red, monto y una o más direcciones de salida con porcentajes y retrasos. El sistema asigna una dirección de depósito y devuelve los detalles de la orden incluyendo comisiones y plan de salida.
Reglas de Validación
amount
: Debe estar entremin_amount
ymax_amount
específicos de la moneda desde/v1/meta/mixer
.addresses
: 1–10 salidas.percent
:- Formato: hasta 2 decimales (ej.,
10
,10.5
,10.50
). - Mínimo por dirección:
≥ 1.00
, máximo:≤ 100.00
. - El total de todas las salidas debe ser exactamente
100.00
. - Si solo hay 1 salida, su porcentaje debe ser exactamente
100.00
.
- Formato: hasta 2 decimales (ej.,
delay
:- Acepta minutos (ej.,
120
) o etiqueta (ej.,"2h 0m"
). - Máximo:
48h
(i.e.,2880
minutos).
- Acepta minutos (ej.,
service_fee
(sobrescritura opcional):- Hasta 2 decimales.
- Rango:
0.10
–5.00
(%). Si se omite, se usa el valor por defecto del sistema para la moneda.
formato de dirección
: Debe coincidir con la red seleccionada (ej., BTC legacy/SegWit, ERC-200x…
, TRC-20T…
, SOL, etc.).destination_tag / memo
: Opcional; requerido para algunas redes (ej., etiqueta XRP, memo TON).
Notas
expires_at
: Cuando expira la dirección de depósito (segundos epoch).outputs[i].time
: Hora de salida planificada en segundos epoch (basado endelay_minutes
).- Usa
?pretty=1
para JSON legible durante pruebas. - Límites de uso: límite diario por API key por defecto; niveles superiores disponibles (ver “Rate Limits”).
Errores Comunes
{ "ok": false, "code": "BAD_REQUEST", "message": "Sum of percents must be exactly 100.00" }
BAD_REQUEST
: Cuerpo inválido, formato de dirección erróneo, porcentaje no con 2 decimales, comisión fuera de rango, retraso > 48h, etc.AMOUNT_TOO_LOW / AMOUNT_TOO_HIGH
: Viola min/max por moneda.SERVICE_UNAVAILABLE
: No hay dirección de depósito disponible para esa red.TOO_MANY_REQUESTS
: Límite diario de API alcanzado.UNAUTHORIZED / FORBIDDEN
: API key inválida o deshabilitada.
Cabeceras
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Cuerpo de la Petición
{ "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 la Petición
{ "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
: Dirección de destino donde se envían los fondos.percent
: Porcentaje del monto total a enviar a esta dirección (ej.,100
para todo el monto o50
para la mitad).delay
: El retraso antes de procesar la transacción. Puede especificarse en minutos (ej.,120
) o en formato de texto (ej.,"2h 0m"
).destination_tag
: Este campo es requerido para redes XRP y TON. Si no se requiere, puede omitirse o dejarse vacío (ej.,""
).
amount
: El monto total en unidades de moneda a transferir. Usa un punto como separador decimal (ej.,10.00000000
).crypto
/network
: La moneda y red blockchain (ej.,btc
/btc
para Bitcoin).partner
: Opcional pero recomendado. Tu PARTNER KEY está disponible en Partner bajo la pestaña API (junto con tu API-KEY). Al usarlo, ganas 30% de la comisión del servicio.service_fee
: Sobrescritura opcional de la comisión en %. Si se omite, aplica el valor por defecto. Si se indica, debe estar entre 0.1 y 5 (inclusive).qrcode
: Opcional.1
devuelve una URL de datos Base64 endeposit.qr_code
;0
o vacío no devuelve QR.destination_tag
: Requerido para redes XRP y TON. Si no es necesario, puede omitirse o dejarse vacío ("").
Cómo Usar el Código QR
Cuando qrcode
se establece en 1
, la respuesta incluirá una imagen codificada en Base64 bajo el campo deposit.qr_code
. Es un código QR totalmente funcional que puedes incrustar en tu frontend como imagen, permitiendo a los usuarios escanearlo con sus aplicaciones de billetera. Ejemplo para mostrarlo en una página web:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Escanear para pagar" />
Los usuarios pueden escanear el código QR con su billetera preferida para rellenar automáticamente la dirección 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 único de la orden.deposit
: Dónde el usuario debe enviar fondos.fees
: Todas las comisiones aplicadas.outputs
: Distribución planificada de fondos, con retrasos.time
yexpires_at
: Timestamps Unix (zona horaria GMT-3).signature_text
: Firma digital blindada para validación.
Ejemplo en 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
La API de Exchange te permite intercambiar un depósito from_coin/ from_network en una única dirección de destino to_coin/ to_network. Asignamos una dirección de depósito, calculamos una cotización en vivo (límites y comisión en USD aplicados) y devolvemos el objeto completo de la orden que puedes consultar hasta que sea financiada y ejecutada.
- Casos de uso: intercambios instantáneos en checkout, “depositar en X → recibir Y”, puentes on-ramp/off-ramp entre L1/L2.
- Obtén límites de pares y comisión por defecto vía
/v1/meta/exchange
antes de crear órdenes. - Todos los campos monetarios están en unidades de moneda salvo indicación; los límites están basados en USD.
- Todos los timestamps son segundos epoch Unix (zona horaria del servidor GMT-3).
EXCHANGE / Crear Orden
Crear una nueva orden de intercambio. Debes indicar el lado from_*
(moneda/red/monto) y la to_address
de destino para el lado to_*
. Te devolvemos una dirección de depósito en la from_network
, una cotización y el plan de salida.
Reglas de validación
amount
: El valor en USD (monto × precio de la moneda origen) debe estar dentro de losmin_usd
/max_usd
específicos del par desde/v1/meta/exchange
.formato de dirección
: Debe coincidir con lato_network
seleccionada (ej.: ERC-200x…
, TRC-20T…
, BTC, DOGE, SOL, etc.).destination_tag / memo
: Opcional pero requerido en algunas redes (ej.: etiqueta de XRP, memo de TON).service_fee
(opcional, porcentaje):- Hasta 2 decimales (ej.:
0.6
=0.60%
). - Límite global: mínimo
0.50%
, máximo3.00%
. - Si se indica por debajo del valor predeterminado del sitio para ese par, se aplicará el valor por defecto. Si es superior a
3.00%
, se limita a3.00%
. - Si se omite, la comisión efectiva =
max(por_defecto, 0.50%)
.
- Hasta 2 decimales (ej.:
Notas
quote.final_usd
= (monto × precio origen) × (1 − %comisión).quote.to.estimated_receive
=final_usd
÷ precio de la moneda destino.receive.delay_label
: Retraso planificado antes de enviar el swap (por defecto0h 10m
).expires_at
: Ventana de depósito para la dirección asignada.- Usa
?pretty=1
para JSON legible durante pruebas.
Cabeceras
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Cuerpo de la petición
{ "from_coin": "eth", "from_network": "eth", "to_coin": "doge", "to_network": "doge", "to_address": "DLPaeuaJi2JLUcvYHD4ddLxadwnGaVSt4p", "amount": "1.00000000", "service_fee": 0.6, // opcional; %0.60 → limitado por reglas "partner": "YOUR_PARTNER_KEY", // opcional, gana 30% de la comisión de la plataforma "qrcode": 1 // opcional; añade QR en base64 en deposit.qr_code}
Cuerpo de la petición (ejemplos 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" }
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,..." // solo 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
: Identificador único de la orden para consultar estado.deposit
: Dónde el usuario debe enviar el from_coin.quote
: Cotización y comisión efectiva.receive
/outputs
: Detalles planificados de salida del swap.
Ejemplo en 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);
Cómo usar el código QR
Cuando qrcode
se establece en 1
al crear, la respuesta incluye un QR en Base64 en deposit.qr_code
. Insértalo directamente como <img> para que los usuarios escaneen la dirección de depósito.
<img src="data:image/png;base64,..." alt="Escanear para pagar" />
Precios
Obtén los últimos precios de mercado en USD de las criptomonedas soportadas. Puedes consultar múltiples símbolos a la vez separándolos con comas.
Endpoint
Parámetros de consulta
symbols
(opcional): Lista separada por comas de símbolos (ej.:BTC,ETH,USDT
). Si se omite, se devuelven todas las monedas soportadas.
Respuesta
ok
:true
si la petición fue exitosa.base
: SiempreUSD
.ts
: Marca de tiempo Unix (segundos).prices
: Objeto que mapeaSÍMBOLO → "precio"
(números en texto).
Ejemplo de petición (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);
Ejemplo de petición (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);
Ejemplo de respuesta
{ "ok": true, "base": "USD", "ts": 1755600000, "prices": { "BTC": "117799.51713382", "ETH": "4409.46254479", "USDT": "1.0005594" } }
Códigos de error
BAD_REQUEST
: Formato inválido desymbols
.UNAUTHORIZED / FORBIDDEN
: API key inválida o ausente.SERVER_ERROR
: Error interno de servidor/base de datos.
Notas
- Los tickers no soportados simplemente se omiten en el objeto
prices
. - Los valores numéricos se devuelven como cadenas para preservar la precisión.
Estado de Orden
Usa un único endpoint para comprobar el estado de pedidos de mixer y de exchange. Puedes establecer explícitamente el tipo de pedido (mixer
/exchange
) o dejar que la API lo detecte automáticamente.
Endpoint
Cuerpo de la solicitud
trackcode
(obligatorio): El código de seguimiento de 16 caracteres en mayúsculas del pedido.type
(opcional):mixer
|exchange
. Si se omite, la API intentará detectarlo automáticamente.outputs
(opcional):none
|summary
|full
(por defecto:summary
).mask_addresses
(opcional):true
=enmascarar direcciones (por defecto),false
=devolver direcciones completas.
Respuesta
type
:mixer
oexchange
.deposit.confirm_status
: Estado de confirmación del depósito:0
: No se ha recibido pago.1
: Pago recibido pero aún pendiente (esperando confirmaciones o no totalmente financiado).2
: Depósito completamente confirmado y financiado.
deposit.delete_in_sec
: Segundos restantes hasta la expiración del período de retención de 48 horas.- Bloque
deposit.funding
:waiting_balance
: Monto total esperado.received_balance
: Monto recibido hasta ahora.remaining_need
: Monto restante necesario.is_fully_funded
: Si está totalmente financiado.can_start
: solo true siconfirm_status==2
Yis_fully_funded==true
.
outputs
:none
: No se devuelve.summary
: Devuelvecount
,sent_count
,sent_total
.full
: Para cada salida:index
,address
(enmascarada o no),destination_tag
,coin
,network
,share_percent
,delay_label
,delay_seconds
,state
,confirm
,tx
,amount
,left_seconds
.
status_reason
: ej."INSUFFICIENT_FUNDS"
(si no está totalmente financiado).
Reglas de negocio
- Los pedidos no comenzarán a menos que estén totalmente financiados (
is_fully_funded=false
): las salidas permanecen sin asignar y no se genera comisión de afiliado. - Si
confirm_status==2
Yis_fully_funded==true
:- Las salidas se sellan con una marca de tiempo una sola vez y permanecen consistentes en comprobaciones repetidas.
- Las ganancias de afiliados se acreditan una única vez cuando el pedido se valida.
Ejemplo de solicitud (PHP)
// Ejemplo Mixer (salidas completas, direcciones sin enmascarar)<?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);
Ejemplo de respuesta — Totalmente financiado
{ "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 } ] }
Ejemplo de respuesta — No financiado completamente
{ "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 las salidas
index
: Número secuencial de la salida en el pedido.address
: Dirección de destino donde se envían los fondos.destination_tag
: Tag/memo opcional para XRP, XLM, etc. (null
si no es requerido).coin
: Código de la criptomoneda de la salida (ej.btc
,eth
).network
: Nombre de la red usada para la transferencia (ej.btc
,eth
).share_percent
: Porcentaje del depósito total asignado a esta salida.delay_label
: Etiqueta legible que muestra cuándo se procesará esta salida (ej.2h 0m
).delay_seconds
: Retraso en segundos hasta que la salida pueda empezar a procesarse.state
: Estado de la salida:0
→ Esperando (depósito aún no totalmente confirmado).1
→ Procesando (programado; comienza cuandodelay_seconds
llega a 0).2
→ Completado (transferencia finalizada).
confirm
: Estado de confirmación de la transferencia (solo relevante enstate=2
):0
→ Transacción transmitida pero aún sin confirmar (pendiente).1
→ Transacción confirmada (al menos 1 confirmación en blockchain).
tx
: Hash de transacción en blockchain para esta salida.amount
: Monto enviado a esta dirección de salida.left_seconds
: Segundos restantes hasta el tiempo de envío programado.
Nota: Esta cuenta regresiva comienza solo después de quedeposit.confirm_status=2
(totalmente confirmado). Ejemplo: si se configuran600
segundos (10 minutos), empieza a contar únicamente tras la confirmación del depósito.
Nota: Los datos de pagos y salidas se actualizan aproximadamente cada 1 minuto.
Códigos de error
BAD_REQUEST
:trackcode
faltante/inválido, cuerpo de solicitud malformado.NOT_FOUND
: Pedido no encontrado.UNAUTHORIZED / FORBIDDEN
: API key inválida o deshabilitada.TOO_MANY_REQUESTS
: Límite diario de solicitudes superado.SERVER_ERROR
: Error inesperado del servidor.
mask_addresses
: controlado pormask_addresses
(por defecto:true
).delay_seconds
: equivalente numérico dedelay_label
(solo se devuelve en modofull
).
Eliminar Orden
Elimina una orden existente para que ya no pueda ser accedida a través de la API. Una vez eliminada, la orden queda permanentemente inaccesible para futuras 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
:true
en caso de éxito.trackcode
: Eco del código de seguimiento solicitado.type
: El tipo de orden (mixer
oexchange
).deleted
:true
si la orden ha sido eliminada.
Comportamiento
- Si la orden ya está eliminada o no se encuentra, la API devuelve 404 NOT_FOUND.
- Si se proporciona
type
, solo se comprueba ese tipo; de lo contrario, la detección es automática.
Ejemplo de solicitud (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);
Ejemplo de respuesta — É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
:trackcode
otype
inválido.NOT_FOUND
: Orden no encontrada o ya eliminada.UNAUTHORIZED / FORBIDDEN
: API key inválida o ausente.SERVER_ERROR
: Error interno del servidor.
Validación de Firma
Valida una carga firmada digitalmente (firma de la Carta de Garantía). Tras una descifrado exitoso, la API devuelve un subconjunto verificado de los detalles de la orden relacionada (mixer o exchange), adecuado para comprobaciones en cliente y visualización de estado.
Endpoint
Cuerpo de la solicitud
signature
(obligatorio): El bloque de firma digital, ya sea en Base64 crudo o con las líneas BEGIN/END.
Respuesta
ok
:true
en caso de éxito.message
: Mensaje de estado legible por humanos.type
:mixer
|exchange
.route
: Para mixer:confirm
|deposit
|mixing
. Para exchange:exc-deposit
|exc-send
.trackcode
: Código de seguimiento resuelto.order
:deposit_address
(string)service_fee
(string, 2 decimales)coin
(string)network
(string)waiting_balance
(string, 8 decimales)created_at
(integer, timestamp Unix)
outputs
(array):coin
,network
,address
,destination_tag
share_percent
(string, 2 decimales)delay_minutes
(integer),delay_label
(ej.2h 0m
)amount
(string, 8 decimales)
outputs_count
(integer)
Comportamiento
- La firma digital proporcionada se valida contra el sistema.
- Solo las órdenes recientes (dentro de las 48 horas) son elegibles para validación. Las órdenes más antiguas pueden haber sido eliminadas automáticamente.
- Si no se encuentra una orden válida, la API responde con 404 NOT_FOUND.
Ejemplo de solicitud (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);
Ejemplo de respuesta — É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": "Se requiere firma digital" } --- { "ok": false, "error": "INVALID_SIGNATURE", "message": "Los datos proporcionados no son Base64 válido o son demasiado cortos" } --- { "ok": false, "error": "DECRYPTION_FAILED", "message": "Error de descifrado. Asegúrese de que la firma proporcionada es válida e inténtelo de nuevo." } --- { "ok": false, "error": "MISSING_TRACKCODE", "message": "El trackcode es obligatorio en la carga de la firma." } --- { "ok": false, "error": "NOT_FOUND", "message": "No se pudieron encontrar los detalles de la orden solicitada." }
Códigos de error
BAD_REQUEST
: Faltasignature
o carga malformada.INVALID_SIGNATURE
: Base64 inválido o el bloque de firma es demasiado corto.DECRYPTION_FAILED
: Error en el descifrado AES-GCM.INVALID_PAYLOAD
: La carga descifrada no es un JSON válido.MISSING_TRACKCODE
: El campotrack
falta en la carga.NOT_FOUND
: Orden no encontrada en las últimas 48 horas.UNAUTHORIZED / FORBIDDEN
: API key inválida o ausente.SERVER_ERROR
: Error interno del servidor.
Notas
- Precisión numérica:
waiting_balance
yamount
→ 8 decimales (string),share_percent
→ 2 decimales (string),service_fee
→ 2 decimales (string). - Retrasos: se devuelven tanto la etiqueta legible por humanos (
delay_label
) como los minutos legibles por máquina (delay_minutes
).