Documentação para desenvolvedores
API pública de sinais CQS
Este guia explica como obter sinais de trading ao vivo da Crypto Quality Signals no seu bot, planilha ou integração personalizada. Se você já usa Cornix, 3Commas ou plataformas similares, pode pular a maior parte disso — elas se conectam com o ID da sua assinatura nas próprias configurações.
URL base de produção:
https://api.cryptoqualitysignals.com
Início rápido
A API pública faz uma coisa principal: retornar sinais de trading abertos publicados pela CQS dentro de uma janela de tempo que você escolhe. Você envia sua api_key, lê o JSON e processa o array signals.
- Escolha sua chave: FREE para sinais públicos, ou o ID da sua assinatura premium no painel CQS.
- Faça GET ou POST em https://api.cryptoqualitysignals.com/getSignal/ com essa chave.
- Analise o array signals. Cada item inclui zona de entrada, alvos, stop loss, exchange e direção.
Requisição mínima (plano gratuito, últimos 5 minutos):
curl -s "https://api.cryptoqualitysignals.com/getSignal/?api_key=FREE&interval=5"
Autenticação
Toda requisição precisa de api_key. Não há token Bearer separado — passe a chave como parâmetro de query (GET) ou campo de formulário (POST).
Acesso gratuito
Use a string literal FREE. Você recebe sinais dos canais free e freemium. Volume e tipos são mais limitados que no premium.
Acesso premium
Após assinar, sua conta recebe um ID de assinatura único — uma string alfanumérica longa. Esse valor é sua api_key. Copie exatamente do painel premium.
Chaves premium liberam sinais VIP. Chaves erradas, expiradas ou inativas retornam código de erro 5.
O endpoint getSignal
| URL | https://api.cryptoqualitysignals.com/getSignal/ |
| Métodos | GET, POST |
| Resposta | application/json, UTF-8 |
GET e POST se comportam da mesma forma. GET é prático para testes rápidos; POST funciona se você preferir corpo de formulário.
Caminho alternativo (mesmo handler): https://api.cryptoqualitysignals.com/api/v1/getSignal
Parâmetros da requisição
| Parâmetro | Obrigatório | Padrão | Descrição |
|---|---|---|---|
api_key |
Sim | — | FREE ou o ID da sua assinatura premium. |
interval |
Não | 5 |
Janela de look-back em minutos (1–20). Apenas sinais abertos nessa janela são retornados. |
exchange |
Não | — | Filtrar por exchange, ex.: binance, BINANCE_FUTURES, kucoin. |
currency |
Não | — | Filtro de moeda de cotação, ex.: USDT, BTC. |
type |
Não | — | Filtro de horizonte do sinal. Deve corresponder a um dos tipos válidos abaixo. Vazio = todos os tipos permitidos para seu plano. |
POST usa os mesmos nomes de campo: api_key, interval, exchange, currency, type.
Formato da resposta
Toda resposta usa o mesmo envelope:
{
"error": 0,
"message": "Success",
"count": 2,
"signals": [ ... ]
}
error— Status numérico (0 = OK). Veja códigos de erro.message— Status legível para logs.count— Tamanho do array signals.signals— Lista de objetos de sinal; vazia quando nada corresponde.
Exemplo (um sinal, campos podem variar):
{
"error": 0,
"message": "Success",
"count": 1,
"signals": [
{
"id": "1847291",
"timestamp": "2026-05-24 14:32:05",
"exchange": "binance",
"currency": "USDT",
"coin": "BTC",
"direction": "LONG",
"buy_start": "94250.5",
"buy_end": "94400",
"target1": "95500",
"target2": "96200",
"target3": "97000",
"stop_loss": "93100",
"type": "SHORT TERM",
"ask": "94325",
"risk_level": "3"
}
]
}
Quando nada está disponível: error 0, message "No new signals available", count 0, signals [].
Campos do sinal explicados
Preços são retornados como strings para evitar surpresas de ponto flutuante. Converta-os como decimais na sua linguagem.
id
ID único do sinal. Registre localmente para não processar o mesmo sinal aberto duas vezes na próxima consulta.
timestamp
Horário de publicação nos nossos servidores (YYYY-MM-DD HH:MM:SS).
exchange, currency, coin
Onde operar. Par = coin/currency (exemplo: BTC/USDT).
direction
LONG = compra esperando alta. SHORT = venda ou short (comum em futuros).
buy_start, buy_end
Zona de entrada sugerida. Muitos traders escalonam a entrada entre esses preços em vez de comprar a mercado no ask.
ask
Preço de referência no momento da publicação. Bots costumam mapear isso ao campo de preço do sinal.
target1, target2, target3
Níveis de take-profit. Nem todo sinal usa três — alvos não usados podem ficar vazios. Saídas parciais em cada nível são comuns.
stop_loss
Preço de invalidação. Para LONG, saia se o preço atingir ou cruzar abaixo desse nível.
type
Faixa de horizonte (veja tipos de sinal).
risk_level
Pontuação interna de risco, geralmente 1–5. Valor maior = setup mais agressivo.
leverage (apenas futuros)
Alavancagem sugerida em exchanges de futuros. Omitido em pares spot.
Tipos de sinal
Passe uma dessas strings exatas no parâmetro type (espaços e barras incluídos):
SHORT TERMSHORT/MID TERMSCALPINGMID TERMLONG TERM
Tipo desconhecido → erro 1 com mensagem descritiva.
Scalping (plano gratuito)
Sinais de scalping gratuitos usam uma tabela separada. Solicite com api_key=FREE e type=SCALPING.
- Apenas target1 é definido (take-profit único).
- buy_start / buy_end ficam ±0,1% em torno do ask.
- risk_level é sempre 3.
- Scalps da BitMEX são excluídos do feed gratuito.
curl -s "https://api.cryptoqualitysignals.com/getSignal/?api_key=FREE&type=SCALPING&interval=10"
Exchanges de futuros e alavancagem
Sinais de futuros usam os códigos de exchange listados abaixo. Use o valor exato do campo exchange ao filtrar com o parâmetro exchange.
Códigos de exchange de futuros suportados
A maioria das linhas usa minúsculas (ex.: binance_futures). O filtro deve coincidir exatamente com o valor armazenado.
-
binance_futuresBinance Futures -
bitget_futuresBitget Futures -
bitmexBitMEX -
bybitBybit -
deribitDeribit -
htx_futuresHTX Futures -
kucoin_futuresKucoin Futures -
okx_futuresOKX Futures
Campo leverage
Ao filtrar por qualquer código de futures listado acima, a resposta inclui leverage — geralmente o ponto médio da nossa faixa min/max. Sem filtro de exchange, leverage é omitido mesmo em sinais de futuros.
Confirme o tipo de contrato e a alavancagem máxima na sua exchange antes de operar automaticamente.
Códigos de erro
| Código | Mensagem típica | O que fazer |
|---|---|---|
0 |
Sucesso / Sem sinais novos | Normal. Verifique count. |
1 |
Chave ausente / Tipo inválido / Parâmetro incorreto | Corrija a requisição. |
4 |
Não foi possível validar a API Key | Banco de billing inacessível — tente novamente mais tarde. |
5 |
API Key inválida / Sistema indisponível | Chave errada, assinatura inativa ou banco de sinais fora do ar. |
6 |
Limite de taxa excedido | Reduza a frequência de consultas (o limite pode voltar no futuro). |
Com que frequência consultar
Não há webhook para entrega pública — você consulta em intervalos.
- A cada 30–60 segundos para scalping; 2–5 minutos costuma bastar para sinais swing.
- Defina interval um pouco maior que o período de consulta para não perder sinais entre requisições.
- Deduplique por id. A API retorna todos os sinais abertos correspondentes na janela, não só os novíssimos.
- Em erro 4 ou 5 com "unavailable", aguarde antes de tentar de novo.
Bots e plataformas de trading
O premium CQS funciona nativamente com 3Commas, Cornix, Zignaly, AnnyDeCrypto, Le-Trader, Nefertiti, 3C.exchange e outros. Essas ferramentas pedem seu ID de assinatura na interface — sem precisar parsear JSON, a menos que você queira uma configuração personalizada.
Montando seu próprio bot? Mapeie coin + currency para o símbolo da exchange, respeite direction, entre entre buy_start e buy_end, defina stop em stop_loss e faça saídas parciais em target1–target3. Teste em paper trading primeiro.
Exemplos de código
GET — premium, Binance USDT, curto prazo
curl -G "https://api.cryptoqualitysignals.com/getSignal/" \
--data-urlencode "api_key=YOUR_SUBSCRIPTION_ID" \
--data-urlencode "interval=15" \
--data-urlencode "exchange=binance" \
--data-urlencode "currency=USDT" \
--data-urlencode "type=SHORT TERM"
POST — corpo de formulário
curl -s -X POST "https://api.cryptoqualitysignals.com/getSignal/" \
-d "api_key=FREE" \
-d "interval=5" \
-d "type=SCALPING"
Python
import requests
API_KEY = "YOUR_SUBSCRIPTION_ID" # or "FREE"
url = "https://api.cryptoqualitysignals.com/getSignal/"
params = {"api_key": API_KEY, "interval": 10, "exchange": "binance", "currency": "USDT"}
resp = requests.get(url, params=params, timeout=30)
data = resp.json()
if data["error"] != 0:
raise RuntimeError(f"API error {data['error']}: {data['message']}")
seen = set()
for sig in data["signals"]:
if sig["id"] in seen:
continue
seen.add(sig["id"])
print(sig["coin"], sig["direction"], sig["ask"])
JavaScript (Node 18+)
const params = new URLSearchParams({ api_key: "FREE", interval: "5" });
const res = await fetch(`https://api.cryptoqualitysignals.com/getSignal/?${params}`);
const data = await res.json();
if (data.error !== 0) throw new Error(`${data.error}: ${data.message}`);
for (const s of data.signals) console.log(s.id, s.coin);
PHP
$q = http_build_query(['api_key' => 'FREE', 'interval' => 5]);
$json = file_get_contents('https://api.cryptoqualitysignals.com/getSignal/?' . $q);
$data = json_decode($json, true);
if ($data['error'] !== 0) throw new Exception($data['message']);
foreach ($data['signals'] as $s) echo $s['id'], ' ', $s['coin'], PHP_EOL;
Perguntas frequentes
- Onde encontro meu ID de assinatura?
- Faça login no painel premium CQS após a compra. Copie o ID de assinatura exatamente para api_key.
- Por que vejo o mesmo sinal duas vezes?
- Sinais abertos permanecem no feed até fecharmos. Registre os valores de id que você já processou.
- Sinais fechados ou com alvo atingido são retornados?
- Não. Apenas sinais abertos dentro da janela de tempo são incluídos.
- HTTPS é obrigatório?
- Sim. Sempre use https://. Nunca envie uma chave premium por HTTP simples.
- Precisa de ajuda?
- Membros premium: use o canal de suporte incluído no seu plano. Em caso de indisponibilidade, teste uma requisição FREE antes de abrir um ticket.
Última atualização: maio de 2026 · Aplica-se a https://api.cryptoqualitysignals.com/getSignal/