Introdução
A API SecretCryptos fornece acesso seguro, simples e consistente aos nossos serviços de Mixer e Exchange. Este documento “Lite” foca nos endpoints principais para começar rapidamente.
URL Base: https://api.secretcryptos.com/v1
Exemplo: GET /v1/ping – testar
Você também pode explorar a página raiz em tempo real em api.secretcryptos.com.
Mais links: Hub de links • Documentação da API (Swagger UI) • Organização no GitHub.
Autenticação
- Header:
Authorization: Bearer YOUR_API_KEY - Todas as requisições devem usar HTTPS.
Obter Chave API
- Crie uma conta ou faça login em Parceiro.
- Abra o menu superior e clique na aba API.
- Copie sua API-KEY (mantenha em segredo; funciona tanto para Mixer quanto para Exchange).
Segurança da Chave API
cURL (lado do 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
Verificação simples de status e versão.
GET https://api.secretcryptos.com/v1/ping
{
"ok": true,
"service": "SecretCryptos API",
"version": "1.2.6",
"ts": 1723800000
}
ts: Unix epoch (segundos).- Não requer autenticação.
MIXER
A API Mixer permite criar transações com preservação de privacidade de forma programática. Você define a moeda, rede, quantidade e um ou mais endereços de saída com percentuais e atrasos opcionais. Nós alocamos um endereço de depósito e retornamos um plano completo (taxas + saídas) para que você possa automatizar recebimentos, pagamentos ou fluxos tipo escrow.
- Casos de uso: recebimento de pagamentos seguros, divisão automática de receitas, pagamentos para várias carteiras, distribuições atrasadas.
- Obtenha limites e taxas via
/v1/meta/mixerantes de criar ordens. - Todos os campos monetários estão em unidades da moeda, salvo indicação contrária.
- Todos os timestamps estão em segundos do Unix epoch (fuso horário: GMT-3 no servidor).
MIXER / Criar Ordem
Criar uma nova ordem de mixer. Você fornece a moeda, rede, valor e um ou mais endereços de saída com percentuais e atrasos. O sistema aloca um endereço de depósito e retorna os detalhes da ordem, incluindo taxas e plano de saída.
Regras de Validação
amount: Deve estar entremin_amountemax_amountespecíficas da moeda em/v1/meta/mixer.addresses: 1–10 saídas.percent:- Formato: até 2 decimais (ex.:
10,10.5,10.50). - Mínimo por endereço:
≥ 1.00, máximo:≤ 100.00. - O total de todas as saídas deve ser exatamente
100.00. - Se houver apenas 1 saída, seu percentual deve ser exatamente
100.00.
- Formato: até 2 decimais (ex.:
delay:- Aceita minutos (ex.:
120) ou rótulo (ex.:"2h 0m"). - Máximo:
48h(ou seja,2880minutos).
- Aceita minutos (ex.:
service_fee(substituição opcional):- Até 2 casas decimais.
- Intervalo:
0.10–5.00(%). Se omitido, o padrão do sistema para a moeda é usado.
formato do endereço: Deve corresponder à rede selecionada (ex.: BTC legacy/SegWit, ERC-200x…, TRC-20T…, SOL etc.).destination_tag / memo: Opcional; obrigatório em algumas redes (ex.: tag do XRP, memo do TON).
Notas
expires_at: Quando o endereço de depósito expira (epoch em segundos).outputs[i].time: Hora planejada de saída em epoch segundos (baseada emdelay_minutes).- Use
?pretty=1para JSON legível durante os testes. - Limites de taxa: limite diário padrão por chave API; níveis superiores disponíveis (veja “Rate Limits”).
Erros Comuns
{
"ok": false,
"code": "BAD_REQUEST",
"message": "Sum of percents must be exactly 100.00"
}
BAD_REQUEST: Corpo inválido, formato errado do endereço, percentual sem 2 decimais, taxa fora do intervalo, atraso > 48h etc.AMOUNT_TOO_LOW / AMOUNT_TOO_HIGH: Viola min/max por moeda.SERVICE_UNAVAILABLE: Nenhum endereço de depósito disponível para essa rede.TOO_MANY_REQUESTS: Limite diário da API atingido.UNAUTHORIZED / FORBIDDEN: Chave API inválida/desativada.
Cabeçalhos
Authorization: Bearer YOUR_API_KEYContent-Type: application/json
Corpo da Requisição
{
"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
}
Corpo da Requisição
{
"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 saída. Cada endereço deve ter os seguintes campos:address: O endereço de destino para onde os fundos serão enviados.percent: O percentual do valor total a ser enviado para este endereço (ex.:100para o valor total ou50para metade).delay: O atraso antes da transação ser processada. Pode ser especificado em minutos (ex.:120) ou em formato de texto (ex.:"2h 0m").destination_tag: Este campo é obrigatório para as redes XRP e TON. Caso não seja necessário, pode ser omitido ou deixado vazio (ex.:"").
amount: O valor total em unidades da moeda a ser transferido. Use ponto como separador decimal (ex.:10.00000000).crypto/network: A moeda e a rede blockchain (ex.:btc/btcpara Bitcoin).partner: Opcional, mas recomendado. Sua PARTNER KEY está disponível em Parceiro na aba API (junto com sua API-KEY). Quando usada, você ganha 30% da taxa de serviço.service_fee: Substituição opcional da taxa de serviço em percentual. Se omitido, aplica-se o padrão do sistema. Se fornecido, deve ser um número entre 0.1 e 5 (inclusive).qrcode: Opcional.1retorna uma URL Base64 emdeposit.qr_code;0ou omitido não retorna QR code.destination_tag: Obrigatório para as redes XRP e TON. Se não necessário, pode ser omitido ou deixado vazio ("").
Como usar o QR Code
Quando o qrcode é definido como 1, a resposta incluirá uma imagem codificada em Base64 no campo deposit.qr_code. Este é um QR code totalmente funcional que você pode incorporar no seu frontend como imagem, permitindo que os usuários o escaneiem com suas carteiras. Aqui está um exemplo de como exibi-lo em uma página web:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Escaneie para pagar" />
Os usuários podem escanear o QR code com o app de carteira preferido para preencher instantaneamente o endereço de destino e o valor, facilitando uma transação rápida e segura.
Resposta
{
"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 da ordem.deposit: Onde o usuário deve enviar os fundos.fees: Todas as taxas aplicadas.outputs: Distribuição planejada dos fundos, com atrasos.timeeexpires_at: Timestamps Unix (fuso horário GMT-3).signature_text: Assinatura digital blindada para validação.
Exemplo em 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
A Exchange API permite trocar um depósito de from_coin/ from_network em um único endereço de destino to_coin/ to_network. Nós alocamos um endereço de depósito, calculamos uma cotação em tempo real (limites baseados em USD + taxa aplicada) e retornamos o objeto completo da ordem que você pode consultar até ser financiada e executada.
- Casos de uso: trocas instantâneas no checkout, “depositar em X → receber Y”, pontes off-ramp/on-ramp entre L1/L2.
- Obtenha limites de pares e taxa padrão via
/v1/meta/exchangeantes de criar ordens. - Todos os campos monetários estão em unidades da moeda, salvo indicação; limites são baseados em USD.
- Todos os timestamps estão em segundos de época Unix (fuso horário do servidor GMT-3).
EXCHANGE / Criar Ordem
Criar uma nova ordem de exchange. Você fornece o lado from_* (moeda/rede/quantia) e o to_address de destino para o lado to_* . Retornamos um endereço de depósito na from_network, uma cotação e o plano de saída.
Regras de Validação
amount: O valor em USD (quantia × preço da moeda de origem) deve estar dentro demin_usd/max_usdespecíficos do par em/v1/meta/exchange.formato do endereço: Deve corresponder àto_networkselecionada (ex.: ERC-200x…, TRC-20T…, BTC, DOGE, SOL etc.).destination_tag / memo: Opcional, mas exigido em algumas redes (ex.: tag XRP, memo TON).service_fee(opcional, porcentagem):- Até 2 casas decimais (ex.:
0.6=0.60%). - Limite global: mín
0.50%, máx3.00%. - Se informado abaixo do padrão do site para o par, aplica-se o padrão do site. Se acima de
3.00%, é limitado a3.00%. - Se omitido, taxa efetiva =
max(padrão do site, 0.50%).
- Até 2 casas decimais (ex.:
Notas
quote.final_usd= (quantia × preço de origem) × (1 − taxa%).quote.to.estimated_receive=final_usd÷ preço da to_coin.receive.delay_label: Atraso planejado antes de enviarmos o swap (padrão0h 10m).expires_at: Janela de depósito para o endereço alocado.- Use
?pretty=1para JSON formatado durante os testes.
Cabeçalhos
Authorization: Bearer YOUR_API_KEYContent-Type: application/json
Corpo da Requisição
{
"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 pelas regras "partner": "YOUR_PARTNER_KEY", // opcional, rende 30% da taxa da plataforma "qrcode": 1 // opcional; adiciona QR em base64 em deposit.qr_code}
Corpo da Requisição (exemplos 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"
}
Resposta
{
"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,..." // somente se 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 da ordem para consultar status.deposit: Onde o usuário deve enviar o from_coin.quote: Cotação e taxa efetiva.receive/outputs: Detalhes planejados da saída do swap.
Exemplo em 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);
Como usar o QR Code
Quando qrcode é definido como 1 em Create, a resposta inclui um QR em Base64 em deposit.qr_code. Insira-o diretamente como <img> para permitir que os usuários escaneiem o endereço de depósito.
<img src="data:image/png;base64,..." alt="Escaneie para pagar" />
Preços
Recupere os preços de mercado mais recentes em USD para criptomoedas suportadas. Você pode consultar múltiplos símbolos de uma vez separando-os por vírgula.
Endpoint
Parâmetros de Consulta
symbols(opcional): Lista separada por vírgulas de símbolos de moedas (ex.:BTC,ETH,USDT). Se omitido, retorna todas as moedas suportadas.
Resposta
ok:truese a requisição foi bem-sucedida.base: SempreUSD.ts: Timestamp Unix (segundos).prices: Objeto mapeandoSÍMBOLO → "preço"(números em string).
Exemplo de Requisição (Apenas 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);
Exemplo de Requisição (Todos os 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);
Exemplo de Resposta
{
"ok": true,
"base": "USD",
"ts": 1755600000,
"prices": {
"BTC": "117799.51713382",
"ETH": "4409.46254479",
"USDT": "1.0005594"
}
}
Códigos de Erro
BAD_REQUEST: Formato inválido desymbols.UNAUTHORIZED / FORBIDDEN: API key inválida ou ausente.SERVER_ERROR: Erro interno no servidor/banco de dados.
Notas
- Tickers não suportados simplesmente são omitidos do objeto
prices. - Valores numéricos são retornados como strings para preservar precisão.
Status da Ordem
Use um único endpoint para verificar o status de pedidos de mixer e de exchange. Você pode definir explicitamente o tipo de pedido (mixer/exchange) ou deixar a API detectar automaticamente.
Endpoint
Corpo da Requisição
trackcode(obrigatório): O código de rastreamento de 16 caracteres em maiúsculas do pedido.type(opcional):mixer|exchange. Se omitido, a API tentará detectar automaticamente.outputs(opcional):none|summary|full(padrão:summary).mask_addresses(opcional):true=endereços mascarados (padrão),false=retornar endereços completos.
Resposta
type:mixerouexchange.deposit.confirm_status: Status de confirmação do depósito:0: Nenhum pagamento recebido.1: Pagamento recebido, mas ainda pendente (aguardando confirmações ou não totalmente financiado).2: Depósito totalmente confirmado e financiado.
deposit.delete_in_sec: Segundos restantes até a expiração de retenção de 48 horas.- Bloco
deposit.funding:waiting_balance: Valor total esperado.received_balance: Valor recebido até agora.remaining_need: Valor restante necessário.is_fully_funded: Indica se está totalmente financiado.can_start: somente verdadeiro seconfirm_status==2Eis_fully_funded==true.
outputs:none: Não retornado.summary: Retornacount,sent_count,sent_total.full: Para cada saída:index,address(mascarado ou não),destination_tag,coin,network,share_percent,delay_label,delay_seconds,state,confirm,tx,amount,left_seconds.
status_reason: Ex.:"INSUFFICIENT_FUNDS"(se não estiver totalmente financiado).
Regras de Negócio
- Os pedidos não iniciarão a menos que estejam totalmente financiados (
is_fully_funded=false): as saídas permanecem não atribuídas e nenhum pagamento de afiliado é gerado. - Se
confirm_status==2Eis_fully_funded==true:- As saídas recebem carimbo de data/hora uma vez e permanecem consistentes em verificações repetidas.
- Os ganhos de afiliados são creditados uma única vez quando o pedido se torna válido.
Exemplo de Requisição (PHP)
// Exemplo Mixer (saídas completas, endereços não mascarados)<?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);
Exemplo de Resposta — 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
}
]
}
Exemplo de Resposta — Parcialmente Financiado
{
"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"
}
}
Explicação das Saídas
index: Número sequencial da saída no pedido.address: Endereço de destino para onde os fundos são enviados.destination_tag: Tag/memo opcional para XRP, XLM, etc. (nullse não for necessário).coin: Código da criptomoeda da saída (ex.:btc,eth).network: Nome da rede usada para a transferência (ex.:btc,eth).share_percent: Percentual do depósito total atribuído a esta saída.delay_label: Rótulo legível indicando quando essa saída será processada (ex.:2h 0m).delay_seconds: Atraso em segundos até a saída começar a ser processada.state: Estado da saída:0→ Aguardando (depósito ainda não totalmente confirmado).1→ Processando (agendado; inicia quandodelay_secondschega a 0).2→ Concluído (transferência finalizada).
confirm: Status da confirmação da transferência (apenas relevante emstate=2):0→ Transação transmitida, mas ainda não confirmada (pendente).1→ Transação confirmada (pelo menos 1 confirmação na blockchain).
tx: Hash da transação blockchain para esta saída.amount: Valor enviado para este endereço de saída.left_seconds: Segundos restantes até o horário agendado de envio.
Nota: Essa contagem regressiva começa apenas apósdeposit.confirm_status=2(totalmente confirmado). Exemplo: se600segundos (10 minutos) for definido, começa a contar apenas após a confirmação do depósito.
Nota: Os dados de pagamento e saídas são atualizados a cada ~1 minuto.
Códigos de Erro
BAD_REQUEST:trackcodeausente/inválido, corpo de requisição malformado.NOT_FOUND: Pedido não encontrado.UNAUTHORIZED / FORBIDDEN: Chave da API inválida ou desativada.TOO_MANY_REQUESTS: Limite diário de requisições excedido.SERVER_ERROR: Erro inesperado do servidor.
mask_addresses: controlado pormask_addresses(padrão:true).delay_seconds: equivalente numérico dedelay_label(retornado apenas no modofull).
Excluir Ordem
Exclui um pedido existente para que não possa mais ser acessado através da API. Uma vez excluído, o pedido fica permanentemente indisponível para consultas futuras.
Endpoint
Corpo da Requisição
trackcode(obrigatório): O código de rastreamento em maiúsculas com 16 caracteres.type(opcional):mixer|exchange. Se omitido, a detecção é automática.
Resposta
ok:trueem caso de sucesso.trackcode: Eco do código de rastreamento solicitado.type: O tipo de pedido (mixerouexchange).deleted:truese o pedido foi excluído.
Comportamento
- Se o pedido já estiver excluído ou não for encontrado, a API retorna 404 NOT_FOUND.
- Se
typefor fornecido, apenas esse tipo será verificado; caso contrário, a detecção é automática.
Exemplo de Requisição (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);
Exemplo de Resposta — Sucesso
{
"ok": true,
"trackcode": "D391FC08747E7B04",
"type": "exchange",
"deleted": true
}
Exemplo de Resposta — Não Encontrado
{
"ok": false,
"code": "NOT_FOUND",
"message": "Order not found or already deleted"
}
Códigos de Erro
BAD_REQUEST:trackcodeoutypeinválido.NOT_FOUND: Pedido não encontrado ou já excluído.UNAUTHORIZED / FORBIDDEN: Chave de API inválida ou ausente.SERVER_ERROR: Erro interno do servidor.
Validação de Assinatura
Valida uma carga assinada digitalmente (assinatura da Carta de Garantia). Após a descriptografia bem-sucedida, a API retorna um subconjunto verificado dos detalhes do pedido relacionado (mixer ou exchange), adequado para verificações no cliente e exibição de status.
Endpoint
Corpo da Requisição
signature(obrigatório): O bloco de assinatura digital, em Base64 bruto ou com as linhas BEGIN/END.
Resposta
ok:trueem caso de sucesso.message: Mensagem de status legível por humanos.type:mixer|exchange.route: Para mixer:confirm|deposit|mixing. Para exchange:exc-deposit|exc-send.trackcode: Código de rastreamento resolvido.order:deposit_address(string)service_fee(string, 2 decimais)coin(string)network(string)waiting_balance(string, 8 decimais)created_at(inteiro, timestamp Unix)
outputs(array):coin,network,address,destination_tagshare_percent(string, 2 decimais)delay_minutes(inteiro),delay_label(ex.:2h 0m)amount(string, 8 decimais)
outputs_count(inteiro)
Comportamento
- A assinatura digital fornecida é validada contra o sistema.
- Apenas pedidos recentes (dentro de 48 horas) são elegíveis para validação. Pedidos mais antigos podem ter sido removidos automaticamente.
- Se nenhum pedido válido for encontrado, a API responde com 404 NOT_FOUND.
Exemplo de Requisição (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);
Exemplo de Resposta — Sucesso
{
"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
}
Exemplo de Resposta — Erros
{
"ok": false,
"error": "BAD_REQUEST",
"message": "Assinatura digital é obrigatória"
}
---
{
"ok": false,
"error": "INVALID_SIGNATURE",
"message": "Os dados fornecidos não são Base64 válidos ou são muito curtos"
}
---
{
"ok": false,
"error": "DECRYPTION_FAILED",
"message": "Falha na descriptografia. Certifique-se de que a assinatura fornecida é válida e tente novamente."
}
---
{
"ok": false,
"error": "MISSING_TRACKCODE",
"message": "O trackcode é obrigatório no payload da assinatura."
}
---
{
"ok": false,
"error": "NOT_FOUND",
"message": "Os detalhes do pedido solicitado não puderam ser encontrados."
}
Códigos de Erro
BAD_REQUEST: Faltasignatureou payload malformado.INVALID_SIGNATURE: Base64 inválido ou bloco de assinatura muito curto.DECRYPTION_FAILED: Falha na descriptografia AES-GCM.INVALID_PAYLOAD: O payload descriptografado não é um JSON válido.MISSING_TRACKCODE: O campotrackestá ausente no payload.NOT_FOUND: Pedido não encontrado nas últimas 48 horas.UNAUTHORIZED / FORBIDDEN: Chave de API inválida ou ausente.SERVER_ERROR: Erro interno do servidor.
Notas
- Precisão numérica:
waiting_balanceeamount→ 8 decimais (string),share_percent→ 2 decimais (string),service_fee→ 2 decimais (string). - Atrasos: são retornados tanto o rótulo humano (
delay_label) quanto os minutos legíveis pela máquina (delay_minutes).