Webhook universal · TradingView · Mercado de estrategias

Webhook para desarrolladores

Guía pública para desarrolladores de estrategias que publican en el mercado desde TradingView.

URL principal del webhook

Este es el endpoint de publicación de estrategias. La estrategia se registra una sola vez y las señales posteriores actualizan o ejecutan sobre los traders suscritos.

https://www.criptocampus.com/webhooks/strategies/chan************************oken

Token de ingestión

Por seguridad, esta ruta pública no muestra el token real completo. Compártelo solo por canal privado con cada desarrollador autorizado.

chan************************oken
El token visible aquí está enmascarado. La versión real debe compartirse solo con desarrolladores aprobados.

JSON universal esperado

Este ejemplo ya respeta el esquema exacto que valida la app actualmente.

{
  "schema_version": "1.0",
  "message_id": "tv-btc-momentum-20260620-120001-enter-long",
  "sent_at": "2026-06-20T12:00:01Z",
  "source": {
    "publisher_id": "criptocampus-labs",
    "publisher_name": "Criptocampus Labs",
    "integration_id": "tradingview-prod",
    "token_id": "tv-main-feed"
  },
  "strategy": {
    "strategy_id": "btc-momentum-dca",
    "name": "BTC Momentum DCA",
    "version": "1.2.0",
    "manifest_hash": "sha256-btc-momentum-dca-v1-2-0",
    "last_modified_at": "2026-06-20T11:58:00Z",
    "description": {
      "short": "Estrategia de momentum con entradas L0 y DCA sobre BTCUSDT.",
      "long": "Publica señales ENTER_LONG, DCA_LONG y EXIT_LONG para usuarios suscritos en wallets compatibles."
    },
    "market": {
      "market_type": "futures",
      "symbol": "BTCUSDT",
      "base_asset": "BTC",
      "quote_asset": "USDT",
      "position_mode": "one_way",
      "contract_type": "linear_perpetual",
      "default_exchange": "bingx",
      "allowed_exchanges": [
        "bingx",
        "bybit"
      ],
      "timeframe": "15m"
    },
    "risk": {
      "profile": "medium",
      "max_drawdown_pct": 8.5
    },
    "metrics": {
      "win_rate_pct": 63.4,
      "realized_pnl_pct": 18.2
    },
    "parameters": [
      {
        "key": "margin_usd",
        "label": "Margen en USDT",
        "type": "number",
        "default": 15,
        "required": true
      },
      {
        "key": "leverage",
        "label": "Apalancamiento",
        "type": "number",
        "default": 10,
        "required": true
      },
      {
        "key": "take_profit_pct",
        "label": "Take profit %",
        "type": "number",
        "default": 2.4,
        "required": false
      },
      {
        "key": "stop_loss_pct",
        "label": "Stop loss %",
        "type": "number",
        "default": 1.2,
        "required": false
      }
    ]
  },
  "signal": {
    "action": "ENTER_LONG",
    "level": "L0",
    "price": 62112.1,
    "reason": "Momentum breakout",
    "margin_usd": 15,
    "leverage": 10
  }
}

Qué hace la app al recibirlo

Si la estrategia no existe, la crea en Mercado de estrategias. Si ya existe, actualiza su manifiesto sin duplicarla. Las señales repetidas con el mismo message_id se ignoran para no ejecutar dos veces.

  • No añadas campos inventados fuera del esquema si no están acordados.
  • message_id debe ser único por evento real enviado.
  • allowed_exchanges define en qué conectores puede ejecutarse la estrategia.
  • Los parámetros en strategy.parameters se usan luego en el modal de configuración del trader.

Ejemplo listo para TradingView

POST /webhooks/strategies/:ingestToken

schema_version message_id source strategy signal ENTER_LONG DCA_LONG EXIT_LONG