TRADECYCLEBOT · SIGNAL SELLER API

Conecta tu sistema de señales a TradeCycleBot.

Esta documentación es pública para que puedas revisar la integración antes de registrarte. Cuando tu cuenta de Signal Seller sea aprobada podrás crear una API key privada y comenzar a publicar señales desde tu software, estrategia o servidor.

01

Antes de conectar

La documentación puede leerse sin cuenta. Para enviar señales reales necesitas completar este flujo:

  1. Crear una cuenta TCB y activar el espacio Signal Seller.
  2. Completar el perfil y enviar la solicitud para aprobación.
  3. Después de ser aprobado, crear al menos un canal de señales.
  4. 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.
02

Autenticació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.

03

Publicar 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"
}
04

Referencia de campos

CampoRequeridoDescripción
channel_id / channelSí, unoID numérico del canal o slug de un canal ACTIVE perteneciente al seller autenticado.
sideSíBUY o SELL.
symbolSíSímbolo en mayúsculas, por ejemplo BTCUSDT. Para performance verificada debe existir en Binance Spot al publicar.
ttl_secondsSí1–86400. Define cuánto tiempo queda disponible la señal para entrega al bot. No limita el tracking de performance.
reference_priceNoPrecio de referencia aportado por el seller. Se conserva como metadata, pero no determina las estadísticas verificadas.
confidenceNoValor numérico opcional definido por tu sistema como metadata de la señal.
commentNoTexto descriptivo de la señal. El Portal conserva hasta 2000 caracteres.
source_event_idNo, recomendadoIdentificador único de tu evento. Permite reintentar sin crear señales duplicadas; máximo 240 caracteres almacenados.
05

Ejemplos 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());
06

Respuesta 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.

07

Reintentos 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.

08

TradeCycleBot 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.
09

Seguridad 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.