← Volver a Guías

Documentación API v2.0

Accede a las señales REALES del Bot Master vía API REST

🚀 Introducción

La API de B.E.N.D.E.R. te permite acceder a las señales de trading REALES generadas por el Bot Master especializado en NASDAQ 100.

✅ Servidor en Producción: La API está operativa y sirviendo señales reales del Bot Master.
🆕 v2.0: Ahora incluye todos los campos para trailing stops, órdenes límite y gestión avanzada.

🌐 Base URL

📡 Producción: https://api.benderbot.es:5001/api/v1

🔐 Autenticación HMAC

Todas las peticiones requieren autenticación HMAC-SHA256.

Headers Requeridos

HeaderDescripción
X-API-KeyTu API Key
X-TimestampTimestamp Unix (segundos)
X-SignatureFirma HMAC-SHA256
X-Session-IDUUID único de sesión

Generar Firma

message = timestamp + api_key
signature = HMAC-SHA256(api_secret, message)

📡 Endpoints

GET /health

Health check público - No requiere autenticación.

GET /signals

Señales de trading REALES activas del Bot Master.

GET /signals/history

Historial de señales (limitado según plan).

GET /stats

Estadísticas del Bot Master.

GET /account

Información de tu cuenta y uso actual.

GET /sessions/active

Ver tus sesiones activas.

POST /sessions/terminate

Terminar una sesión específica.

📋 Estructura de Señal

Cada señal del endpoint /signals contiene los siguientes campos:

Campos de Identificación

CampoTipoDescripción
signal_idintegerID único de la señal
symbolstringSímbolo del activo (ej: "TSLA", "AAPL")

Campos de Acción

CampoTipoDescripción
actionstringTipo de acción (ver tipos)
action_typestringAlias de action (compatibilidad)
quantityintegerCantidad de acciones/contratos

Campos de Precios

CampoTipoDescripción
entry_pricefloat | nullPrecio de entrada sugerido
pricefloat | nullAlias de entry_price (para limit orders)
stop_lossfloat | nullPrecio de stop loss
take_profitfloat | nullPrecio de take profit
stop_pricefloat | nullPrecio para stop orders
target_exit_pricefloat | nullPrecio objetivo de salida

Campos de Trailing Stop NUEVO

CampoTipoDescripción
trail_amountfloat | nullCantidad en $ para trailing stop
trailing_stop_pctfloat | nullPorcentaje para trailing stop

Campos de Control NUEVO

CampoTipoDescripción
order_idstring | nullID de orden (para cancelaciones)
tifstringTime in Force: "DAY", "GTC", etc.
close_positionsbooleanSi true, cerrar todas las posiciones

Campos de Confianza

CampoTipoDescripción
confidencefloatNivel de confianza (0.0 - 1.0)
kelly_fractionfloatFracción Kelly para sizing

Campos de Estado y Tiempo

CampoTipoDescripción
statusstring"active" o "inactive"
is_activebooleanSi la señal está activa
created_atstring (ISO)Fecha de creación
expires_atstring (ISO)Fecha de expiración
time_to_live_minutesintegerTTL en minutos

Ejemplo de Respuesta

{
  "success": true,
  "count": 2,
  "signals": [
    {
      // Identificación
      "signal_id": 12345,
      "symbol": "TSLA",
      
      // Acción
      "action": "BUY",
      "action_type": "BUY",
      "quantity": 10,
      
      // Precios
      "entry_price": 245.50,
      "price": 245.50,
      "stop_loss": 240.00,
      "take_profit": 260.00,
      "stop_price": null,
      "target_exit_price": 258.00,
      
      // Trailing Stop
      "trail_amount": 2.50,
      "trailing_stop_pct": null,
      
      // Control
      "order_id": null,
      "tif": "DAY",
      "close_positions": false,
      
      // Confianza
      "confidence": 0.75,
      "kelly_fraction": 0.75,
      
      // Estado
      "status": "active",
      "is_active": true,
      "created_at": "2025-12-20T15:30:00Z",
      "expires_at": "2025-12-20T15:35:00Z",
      "time_to_live_minutes": 5
    }
  ],
  "timestamp": "2025-12-20T15:30:05Z"
}

🎯 Tipos de Acción

El campo action puede tener los siguientes valores:

Acciones de Trading

AcciónDescripciónTTL
BUYComprar (abrir LONG)5 min
SELLVender (cerrar LONG o abrir SHORT)5 min
SHORTVenta en corto5 min
COVERCubrir posición corta5 min

Acciones de Gestión

AcciónDescripciónTTL
UPDATE_TRAILING_STOPActualizar trailing stop8 horas
UPDATE_STOPModificar stop loss8 horas
CANCEL_STOPCancelar orden de stop8 horas
CANCEL_ORDERCancelar orden pendiente8 horas

Acciones de Órdenes Límite

AcciónDescripciónTTL
PLACE_LIMITColocar orden límite1 hora
LIMIT_BUYOrden límite de compra1 hora
LIMIT_SELLOrden límite de venta1 hora

⏱️ Rate Limits

PlanReq/MinConexionesHistorial
Sandbox30115 días
Basic €996017 días
Pro €199120330 días
Enterprise €49930010Completo

💰 Planes

🎁 Prueba gratis: 15 días sin tarjeta de crédito (plan Sandbox).

❌ Códigos de Error

CódigoDescripción
401API Key inválida o firma incorrecta
403Suscripción inactiva o trial expirado
429Rate limit o conexiones excedidas
500Error interno del servidor

💻 Ejemplos de Código

Python - Obtener Señales

import hmac, hashlib, time, uuid, requests

API_KEY = "bdr_live_tu_api_key"
API_SECRET = "tu_api_secret"
BASE_URL = "https://api.benderbot.es:5001/api/v1"
SESSION_ID = str(uuid.uuid4())

def get_headers():
    timestamp = str(int(time.time()))
    message = f"{timestamp}{API_KEY}"
    signature = hmac.new(API_SECRET.encode(), message.encode(), hashlib.sha256).hexdigest()
    return {
        "X-API-Key": API_KEY,
        "X-Timestamp": timestamp,
        "X-Signature": signature,
        "X-Session-ID": SESSION_ID
    }

# Obtener señales
response = requests.get(f"{BASE_URL}/signals", headers=get_headers())
data = response.json()

for s in data.get("signals", []):
    print(f"{s['action']} {s['quantity']} {s['symbol']}")
    
    # Verificar trailing stop
    if s.get('trail_amount'):
        print(f"  Trailing: ${s['trail_amount']}")
    
    # Verificar stop loss
    if s.get('stop_loss'):
        print(f"  Stop Loss: ${s['stop_loss']}")

Python - Procesar Trailing Stop

def process_signal(signal):
    action = signal.get('action')
    symbol = signal.get('symbol')
    
    if action == 'BUY':
        # Ejecutar compra
        execute_buy(
            symbol=symbol,
            quantity=signal.get('quantity'),
            stop_loss=signal.get('stop_loss'),
            take_profit=signal.get('take_profit')
        )
    
    elif action == 'UPDATE_TRAILING_STOP':
        # Actualizar trailing stop
        update_trailing(
            symbol=symbol,
            trail_amount=signal.get('trail_amount'),
            tif=signal.get('tif', 'DAY')
        )
    
    elif action == 'SELL':
        # Cerrar posición
        close_position(symbol)