01Antes de conectar
La documentación puede leerse sin cuenta. Para enviar señales reales necesitas completar este flujo:
- Crear una cuenta TCB y activar el espacio Signal Seller.
- Completar el perfil y enviar la solicitud para aprobación.
- Después de ser aprobado, crear al menos un canal de señales.
- En Signal Seller → 6. Signal API, crear la API key. La clave completa se muestra una sola vez.
Importante: la documentación es pública, pero las API keys nunca lo son. Una key solo puede generarse dentro de una cuenta de Signal Seller aprobada.
02Autenticación
Envía la API key en cada request mediante el header Bearer. No la incluyas en la URL ni en el JSON.
Authorization: Bearer <API_KEY>
Content-Type: application/json
Las claves de Signal Seller comienzan con tcb_sig_sk_. El Portal no almacena la clave completa; conserva un hash y un prefijo corto para identificarla.
03Publicar una señal
POSThttps://tradecyclebot.com/api/v1/signals
El body debe ser JSON. Puedes identificar el canal mediante su channel_id numérico o usando su slug en channel. No envíes ambos salvo que tu integración lo necesite; channel_id tiene prioridad.
{
"channel_id": 1,
"side": "BUY",
"symbol": "BTCUSDT",
"ttl_seconds": 1800,
"reference_price": 65000,
"confidence": 0.85,
"comment": "Breakout confirmed",
"source_event_id": "strategy-A-20260907-0001"
}
04Referencia de campos
| Campo | Requerido | Descripción |
channel_id / channel | Sí, uno | ID numérico del canal o slug de un canal ACTIVE perteneciente al seller autenticado. |
side | Sí | BUY o SELL. |
symbol | Sí | Símbolo en mayúsculas, por ejemplo BTCUSDT. Para performance verificada debe existir en Binance Spot al publicar. |
ttl_seconds | Sí | 1–86400. Define cuánto tiempo queda disponible la señal para entrega al bot. No limita el tracking de performance. |
reference_price | No | Precio de referencia aportado por el seller. Se conserva como metadata, pero no determina las estadísticas verificadas. |
confidence | No | Valor numérico opcional definido por tu sistema como metadata de la señal. |
comment | No | Texto descriptivo de la señal. El Portal conserva hasta 2000 caracteres. |
source_event_id | No, recomendado | Identificador único de tu evento. Permite reintentar sin crear señales duplicadas; máximo 240 caracteres almacenados. |
05Ejemplos listos para usar
cURL
curl -X POST 'https://tradecyclebot.com/api/v1/signals' \
-H 'Authorization: Bearer <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"channel_id": 1,
"side": "BUY",
"symbol": "BTCUSDT",
"ttl_seconds": 1800,
"source_event_id": "strategy-A-0001"
}'
Python
import requests
url = "https://tradecyclebot.com/api/v1/signals"
headers = {
"Authorization": "Bearer <API_KEY>",
"Content-Type": "application/json",
}
payload = {
"channel_id": 1,
"side": "BUY",
"symbol": "BTCUSDT",
"ttl_seconds": 1800,
"source_event_id": "strategy-A-0001",
}
response = requests.post(url, headers=headers, json=payload, timeout=15)
response.raise_for_status()
print(response.json())
JavaScript / Node.js
const response = await fetch("https://tradecyclebot.com/api/v1/signals", {
method: "POST",
headers: {
"Authorization": "Bearer <API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
channel_id: 1,
side: "BUY",
symbol: "BTCUSDT",
ttl_seconds: 1800,
source_event_id: "strategy-A-0001"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
06Respuesta y errores
Publicación aceptada
{
"ok": true,
"signal_id": "sig_...",
"side": "BUY",
"symbol": "BTCUSDT",
"expires_at": "2026-09-07T19:30:00+00:00",
"verified_entry_price": 112345.67,
"performance_ruleset": "TCB_SIGNAL_V1",
"market_source": "BINANCE_SPOT"
}
2xxRequest aceptado
400Payload, canal, símbolo o publicación inválidos
401API key ausente, inválida, revocada o seller no aprobado
Los errores de validación responden JSON con {"ok":false,"error":"..."}. Trata cualquier respuesta no 2xx como no confirmada y utiliza un source_event_id estable antes de reintentar.
07Reintentos seguros e idempotencia
Si tu servidor pierde la respuesta HTTP, no generes un ID nuevo. Reenvía exactamente el mismo source_event_id. TradeCycleBot mantiene ese identificador único por seller y devuelve la señal ya registrada en lugar de crear otra.
source_event_id = "YOUR_SYSTEM_EVENT_123456"
Usa un identificador determinista que pertenezca al evento de tu sistema, no al intento HTTP.
08TradeCycleBot Verified Performance
Desde v10.79 el Portal registra automáticamente el precio de Binance Spot en el instante de publicación como verified_entry_price. Ese valor, no reference_price, es el entry utilizado para la performance pública del Signal Seller.
WIN+0.50%movimiento favorable
LOSS−3.00%movimiento adverso
TARGETS3 · 5 · 8 · 10%MFE
VENTANA7 daysindependiente del TTL
BUY y SELL se evalúan simétricamente. Una señal que alcanza +0,50% favorable ya cuenta como WIN y continúa en seguimiento para medir su peak hasta volver al entry, alcanzar +10% o finalizar la ventana. Una señal que no alcanza ni WIN ni LOSS durante 7 días queda EXPIRED.
TTL ≠ performance window. Por ejemplo, ttl_seconds=1800 significa que el bot puede consumir la señal durante 30 minutos; TradeCycleBot puede seguir midiendo su performance después de esos 30 minutos.
09Seguridad de integración
- Guarda la API key como secreto del servidor o variable de entorno; nunca en JavaScript ejecutado por el navegador.
- No publiques la key en logs, screenshots, repositorios o tickets de soporte.
- Usa siempre HTTPS y verifica el status HTTP antes de considerar una señal publicada.
- Usa
source_event_id en producción para que los reintentos sean idempotentes.