Documentazione per sviluppatori
API pubblica segnali CQS
Questa guida spiega come ottenere segnali di trading live da Crypto Quality Signals nel tuo bot, foglio di calcolo o integrazione personalizzata. Se usi già Cornix, 3Commas o piattaforme simili, puoi saltare gran parte del contenuto — si collegano con il tuo ID abbonamento dalle loro impostazioni.
URL base di produzione:
https://api.cryptoqualitysignals.com
Avvio rapido
L'API pubblica fa una cosa principale: restituire segnali di trading aperti pubblicati da CQS in una finestra temporale a tua scelta. Invii la tua api_key, leggi il JSON e processi l'array signals.
- Scegli la chiave: FREE per i segnali pubblici, oppure l'ID abbonamento premium dalla dashboard CQS.
- Esegui GET o POST su https://api.cryptoqualitysignals.com/getSignal/ con quella chiave.
- Analizza l'array signals. Ogni elemento include zona di ingresso, target, stop loss, exchange e direzione.
Richiesta minima (piano gratuito, ultimi 5 minuti):
curl -s "https://api.cryptoqualitysignals.com/getSignal/?api_key=FREE&interval=5"
Autenticazione
Ogni richiesta richiede api_key. Non c'è un token Bearer separato — passa la chiave come parametro query (GET) o campo form (POST).
Accesso gratuito
Usa la stringa letterale FREE. Ricevi segnali dai canali free e freemium. Volume e tipi sono più limitati rispetto al premium.
Accesso premium
Dopo l'abbonamento, il tuo account riceve un ID abbonamento univoco — una lunga stringa alfanumerica. Quel valore è la tua api_key. Copialo esattamente dalla dashboard premium.
Le chiavi premium sbloccano i segnali VIP. Chiavi errate, scadute o inattive restituiscono codice errore 5.
L'endpoint getSignal
| URL | https://api.cryptoqualitysignals.com/getSignal/ |
| Metodi | GET, POST |
| Risposta | application/json, UTF-8 |
GET e POST si comportano allo stesso modo. GET è comodo per test rapidi; POST va bene se preferisci un body form.
Percorso alternativo (stesso handler): https://api.cryptoqualitysignals.com/api/v1/getSignal
Parametri della richiesta
| Parametro | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|
api_key |
Sì | — | FREE o il tuo ID abbonamento premium. |
interval |
No | 5 |
Finestra di look-back in minuti (1–20). Vengono restituiti solo i segnali aperti in quella finestra. |
exchange |
No | — | Filtra per exchange, es. binance, BINANCE_FUTURES, kucoin. |
currency |
No | — | Filtro valuta di quotazione, es. USDT, BTC. |
type |
No | — | Filtro orizzonte del segnale. Deve corrispondere a uno dei tipi validi sotto. Vuoto = tutti i tipi consentiti per il tuo piano. |
POST usa gli stessi nomi campo: api_key, interval, exchange, currency, type.
Formato della risposta
Ogni risposta usa lo stesso envelope:
{
"error": 0,
"message": "Success",
"count": 2,
"signals": [ ... ]
}
error— Stato numerico (0 = OK). Vedi codici di errore.message— Stato leggibile per i log.count— Lunghezza dell'array signals.signals— Elenco di oggetti segnale; vuoto quando non c'è corrispondenza.
Esempio (un segnale, i campi possono variare):
{
"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 non c'è nulla: error 0, message "No new signals available", count 0, signals [].
Campi del segnale spiegati
I prezzi sono restituiti come stringhe per evitare sorprese da floating point. Parsali come decimali nel tuo linguaggio.
id
ID univoco del segnale. Traccialo in locale per non processare due volte lo stesso segnale aperto al poll successivo.
timestamp
Ora di pubblicazione sui nostri server (YYYY-MM-DD HH:MM:SS).
exchange, currency, coin
Dove operare. Coppia = coin/currency (esempio: BTC/USDT).
direction
LONG = acquisto aspettando un rialzo. SHORT = vendita o short (comune sui futures).
buy_start, buy_end
Zona di ingresso suggerita. Molti trader scalano l'ingresso tra questi prezzi invece di comprare a mercato sull'ask.
ask
Prezzo di riferimento al momento della pubblicazione. I bot spesso lo mappano al campo prezzo del segnale.
target1, target2, target3
Livelli di take-profit. Non ogni segnale ne usa tre — i target non usati possono essere vuoti. Uscite parziali a ogni livello sono comuni.
stop_loss
Prezzo di invalidazione. Per LONG, esci se il prezzo raggiunge o scende sotto questo livello.
type
Fascia di orizzonte (vedi tipi di segnale).
risk_level
Punteggio di rischio interno, di solito 1–5. Valore più alto = setup più aggressivo.
leverage (solo futures)
Leva suggerita sugli exchange futures. Omesso sulle coppie spot.
Tipi di segnale
Passa una di queste stringhe esatte nel parametro type (spazi e slash inclusi):
SHORT TERMSHORT/MID TERMSCALPINGMID TERMLONG TERM
Tipo sconosciuto → errore 1 con messaggio descrittivo.
Scalping (piano gratuito)
I segnali scalping gratuiti usano una tabella separata. Richiedili con api_key=FREE e type=SCALPING.
- Solo target1 è impostato (take-profit singolo).
- buy_start / buy_end sono ±0,1% intorno all'ask.
- risk_level è sempre 3.
- Gli scalp BitMEX sono esclusi dal feed gratuito.
curl -s "https://api.cryptoqualitysignals.com/getSignal/?api_key=FREE&type=SCALPING&interval=10"
Exchange futures e leva
I segnali futures usano i codici exchange elencati sotto. Usa il valore esatto del campo exchange quando filtri con il parametro exchange.
Codici exchange futures supportati
La maggior parte delle righe usa minuscole (es. binance_futures). Il filtro deve corrispondere esattamente al valore memorizzato.
-
binance_futuresBinance Futures -
bitget_futuresBitget Futures -
bitmexBitMEX -
bybitBybit -
deribitDeribit -
htx_futuresHTX Futures -
kucoin_futuresKucoin Futures -
okx_futuresOKX Futures
Campo leverage
Filtrando per qualsiasi codice futures elencato sopra, la risposta include leverage — di solito il punto medio del nostro intervallo min/max. Senza filtro exchange, leverage è omesso anche per segnali futures.
Conferma tipo di contratto e leva massima sul tuo exchange prima del trading automatico.
Codici di errore
| Codice | Messaggio tipico | Cosa fare |
|---|---|---|
0 |
Successo / Nessun nuovo segnale | Normale. Controlla count. |
1 |
Chiave mancante / Tipo non valido / Parametro errato | Correggi la richiesta. |
4 |
Impossibile validare l'API Key | DB billing irraggiungibile — riprova più tardi. |
5 |
API Key non valida / Sistema non disponibile | Chiave errata, abbonamento inattivo o DB segnali down. |
6 |
Limite di rate superato | Rallenta il polling (il limite potrebbe tornare in futuro). |
Con quale frequenza fare polling
Non c'è webhook per la consegna pubblica — fai polling a intervalli.
- Ogni 30–60 secondi per lo scalping; 2–5 minuti di solito bastano per segnali swing.
- Imposta interval leggermente più ampio del periodo di poll per non perdere segnali tra una richiesta e l'altra.
- Deduplica per id. L'API restituisce tutti i segnali aperti corrispondenti nella finestra, non solo quelli nuovissimi.
- Su errore 4 o 5 con "unavailable", attendi prima di riprovare.
Bot e piattaforme di trading
Il premium CQS funziona nativamente con 3Commas, Cornix, Zignaly, AnnyDeCrypto, Le-Trader, Nefertiti, 3C.exchange e altri. Quegli strumenti chiedono il tuo ID abbonamento nella loro UI — niente parsing JSON a meno che non voglia un setup personalizzato.
Stai costruendo il tuo bot? Mappa coin + currency al simbolo dell'exchange, rispetta direction, entra tra buy_start e buy_end, imposta lo stop su stop_loss e scala le uscite su target1–target3. Prova prima in paper trading.
Esempi di codice
GET — premium, Binance USDT, breve termine
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 — body form
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;
Domande frequenti
- Dove trovo il mio ID abbonamento?
- Accedi alla dashboard premium CQS dopo l'acquisto. Copia l'ID abbonamento esattamente in api_key.
- Perché vedo lo stesso segnale due volte?
- I segnali aperti restano nel feed finché non li chiudiamo. Traccia i valori id già gestiti.
- Vengono restituiti segnali chiusi o con target raggiunto?
- No. Sono inclusi solo segnali aperti nella finestra temporale.
- HTTPS è obbligatorio?
- Sì. Usa sempre https://. Non inviare mai una chiave premium su HTTP in chiaro.
- Serve aiuto?
- Membri premium: usa il canale supporto incluso nel piano. In caso di disservizio, prova una richiesta FREE prima di aprire un ticket.
Ultimo aggiornamento: maggio 2026 · Si applica a https://api.cryptoqualitysignals.com/getSignal/