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/mixer
antes 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_amount
emax_amount
especí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,2880
minutos).
- 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=1
para 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_KEY
Content-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.:100
para o valor total ou50
para 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
/btc
para 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.1
retorna uma URL Base64 emdeposit.qr_code
;0
ou 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.time
eexpires_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/exchange
antes 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_usd
específicos do par em/v1/meta/exchange
.formato do endereço
: Deve corresponder àto_network
selecionada (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=1
para JSON formatado durante os testes.
Cabeçalhos
Authorization: Bearer YOUR_API_KEY
Content-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
:true
se 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
:mixer
ouexchange
.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==2
Eis_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==2
Eis_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. (null
se 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_seconds
chega 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: se600
segundos (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
:trackcode
ausente/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
:true
em caso de sucesso.trackcode
: Eco do código de rastreamento solicitado.type
: O tipo de pedido (mixer
ouexchange
).deleted
:true
se 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
type
for 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
:trackcode
outype
invá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
:true
em 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_tag
share_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
: Faltasignature
ou 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 campotrack
está 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_balance
eamount
→ 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
).