PERFILTRADE

API · v1 · solo lectura

API de datos

Las mismas cifras del portal, por script: reportes con su n, el parte diario, la semana, el posicionamiento semanal y los efectos de calendario. Solo lectura, en JSON.

Qué trae y qué no

Solo tamaño, frecuencia, hora y distancia, cada cifra con su muestra (n). No hay precios ni cotizaciones, no hay dirección probable ni recomendación de qué operar, y no hay señales.

Tu clave personal

La clave se crea en Mi cuenta, dentro del portal, y se envía en cada solicitud. Se muestra una sola vez; regenerarla o revocarla corta la anterior al instante.

Incluida desde el plan Trader, también durante la prueba gratuita de 14 días.

Ver planes

URL base y autenticación

https://cerebro-dalton-platform-api.onrender.com

Envía la clave en el encabezado Authorization: Bearer <clave> (también se acepta X-API-Key). Todas las respuestas son JSON.

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/whoami"

Límite de uso

60 solicitudes cada 60 minutos por clave, compartidas entre todos los endpoints. Cada respuesta de datos trae X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset (segundos).

Endpoints

En los ejemplos, cada lista muestra sus dos primeros elementos y los objetos largos sus primeros campos.

GET/v1/whoami

Tu cuenta y tu plan: sirve para comprobar la clave. No consume el límite.

Parámetros

Sin parámetros.

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/whoami"
Respuesta (ejemplo real, recortado)
{
  "email": "tu@correo.com",
  "tier": "trader",
  "has_reports_access": true
}

GET/v1/reports/{instrument}

Todos los reportes de un mercado (id, n, rango de fechas, tabla y notas), más los retirados con su reemplazo.

Parámetros

  • instrument (path, obligatorio) · ES

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/reports/ES"
Respuesta (ejemplo real, recortado)
{
  "instrument": "ES",
  "reports": [
    {
      "report_name": "adx_regime_filter",
      "instrument": "ES",
      "n_classified": 4187,
      "sample_size": 4187,
      "date_range": [
        "2010-06-07",
        "2026-10-16"
      ],
      "adx_period": 14,
      "...": "5 more fields"
    },
    {
      "report_name": "gap_fill_by_weekday",
      "instrument": "ES",
      "source_file": "historical market data",
      "date_range": [
        "2010-06-07",
        "2026-10-16"
      ],
      "sample_size": 4213,
      "caveats": [
        "Historical futures data with UTC timestamps (no broker-timezone ambiguity). Continuous series built with a highest-volume-contract roll rule per exchange tra...",
        "Gap of exactly 0.0 between consecutive days is excluded from n.",
        "... 2 more"
      ],
      "...": "3 more fields"
    },
    "... 108 more"
  ],
  "retired": {
    "afternoon_ib_first_extreme_by_weekday": {
      "since": "2026-10-11",
      "replacement": "ib_single_double_break_by_weekday",
      "reason": {
        "es": "El IB de la tarde (14:00-16:00 ET) no registra ningún caso en los mercados que lo calculan (n=0 en ES, NQ, GC y ZN), así que no hay cifra que mostrar.",
        "en": "The afternoon IB (14:00-16:00 ET) has no cases in the markets that compute it (n=0 in ES, NQ, GC and ZN), so there is no figure to show.",
        "pt": "O IB da tarde (14:00-16:00 ET) não registra nenhum caso nos mercados que o calculam (n=0 em ES, NQ, GC e ZN), portanto não há número a mostrar."
      }
    },
    "orb_ib_confluence": {
      "since": "2026-10-11",
      "replacement": "orb_variants_by_weekday",
      "reason": {
        "es": "La condición (el rango de apertura y el IB rompen hacia el mismo lado) usa un hecho que solo se conoce completo al cierre, de modo que el 90,9% de ES (n=1.62...",
        "en": "The condition (opening range and IB break the same side) uses a fact that is only fully known at the close, so the 90.9% on ES (n=1,627) is largely construct...",
        "pt": "A condição (o range de abertura e o IB rompem para o mesmo lado) usa um fato que só é conhecido por completo no fechamento, de modo que os 90,9% do ES (n=1.6..."
      }
    },
    "session_range_by_weekday": {
      "since": "2026-10-11",
      "replacement": "range_vs_adr_by_weekday",
      "reason": {
        "es": "El promedio en puntos de toda la historia subestima el rango actual: en ES, sesión de Nueva York, declaraba 23,2 puntos y fuera de muestra (desde 2022) fuero...",
        "en": "The all-history average in points understates today's range: for the ES New York session it stated 23.2 points and out of sample (from 2022) it was 60.1; the...",
        "pt": "A média em pontos de todo o histórico subestima o range atual: no ES, sessão de Nova York, declarava 23,2 pontos e fora da amostra (desde 2022) foram 60,1; a..."
      }
    },
    "opening_range_breakout_standard": {
      "since": "2026-10-11",
      "replacement": "orb_variants_by_weekday",
      "reason": {
        "es": "Responde la misma pregunta que «Rango de apertura: 5, 15 o 30 minutos» con 130 sesiones en vez de unas 4.200, es decir, con intervalos unas cinco veces más a...",
        "en": "It answers the same question as \"Opening range: 5, 15 or 30 minutes\" with 130 sessions instead of about 4,200, i.e. with intervals roughly five times wider.",
        "pt": "Responde à mesma pergunta que «Range de abertura: 5, 15 ou 30 minutos» com 130 sessões em vez de cerca de 4.200, ou seja, com intervalos cerca de cinco vezes..."
      }
    },
    "power_hour_breakout_standard": {
      "since": "2026-10-11",
      "replacement": "power_hour_new_extreme_by_weekday",
      "reason": {
        "es": "Responde la misma pregunta que «Última hora: ¿marca nuevo máximo o mínimo?» con 126 sesiones en vez de la historia completa.",
        "en": "It answers the same question as \"Last hour: new high or low?\" with 126 sessions instead of the full history.",
        "pt": "Responde à mesma pergunta que «Última hora: marca nova máxima ou mínima?» com 126 sessões em vez do histórico completo."
      }
    },
    "profile_shape_by_weekday": {
      "since": "2026-10-11",
      "replacement": "value_area_extension_by_weekday",
      "reason": {
        "es": "Fuera de muestra la forma del perfil no anticipó la sesión siguiente mejor que la tasa de cualquier día (ES tras un perfil en P: 55,1% declarado, 49,6% obser...",
        "en": "Out of sample the profile shape did not anticipate the next session better than the any-day rate (ES after a P-shaped profile: 55.1% stated, 49.6% observed).",
        "pt": "Fora da amostra a forma do perfil não antecipou a sessão seguinte melhor que a taxa de qualquer dia (ES após um perfil em P: 55,1% declarado, 49,6% observado)."
      }
    },
    "bid_ask_spread_by_weekday": {
      "since": "2026-10-11",
      "replacement": null,
      "reason": {
        "es": "El promedio agrupa por fecha UTC sobre 24 horas y el viernes no tiene reapertura nocturna, por lo que su spread baja solo (ES: -13,2% frente a lunes-jueves e...",
        "en": "The average groups by UTC date over 24 hours and Friday has no evening reopen, so its spread drops by construction (ES: -13.2% against Monday-Thursday over a...",
        "pt": "A média agrupa por data UTC em 24 horas e a sexta-feira não tem reabertura noturna, por isso seu spread cai sozinho (ES: -13,2% frente a segunda-quinta em to..."
      }
    }
  }
}

GET/v1/reports/{instrument}/{report_id}

Un reporte por su id (el report_name de la lista anterior). Un reporte retirado responde 410.

Parámetros

  • instrument (path, obligatorio) · ES
  • report_id (path, obligatorio) · gap_fill_by_weekday

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/reports/ES/gap_fill_by_weekday"
Respuesta (ejemplo real, recortado)
{
  "report_name": "gap_fill_by_weekday",
  "instrument": "ES",
  "source_file": "historical market data",
  "date_range": [
    "2010-06-07",
    "2026-10-16"
  ],
  "sample_size": 4213,
  "caveats": [
    "Historical futures data with UTC timestamps (no broker-timezone ambiguity). Continuous series built with a highest-volume-contract roll rule per exchange tra...",
    "Gap of exactly 0.0 between consecutive days is excluded from n.",
    "... 2 more"
  ],
  "breakdown": {
    "Mon": {
      "gap_up": {
        "n": 388,
        "filled": 303,
        "fill_pct": 78.1
      },
      "gap_down": {
        "n": 387,
        "filled": 323,
        "fill_pct": 83.5
      }
    },
    "Tue": {
      "gap_up": {
        "n": 323,
        "filled": 312,
        "fill_pct": 96.6
      },
      "gap_down": {
        "n": 382,
        "filled": 373,
        "fill_pct": 97.6
      }
    },
    "Wed": {
      "gap_up": {
        "n": 293,
        "filled": 285,
        "fill_pct": 97.3
      },
      "gap_down": {
        "n": 382,
        "filled": 369,
        "fill_pct": 96.6
      }
    },
    "Thu": {
      "gap_up": {
        "n": 333,
        "filled": 324,
        "fill_pct": 97.3
      },
      "gap_down": {
        "n": 370,
        "filled": 356,
        "fill_pct": 96.2
      }
    },
    "Fri": {
      "gap_up": {
        "n": 296,
        "filled": 280,
        "fill_pct": 94.6
      },
      "gap_down": {
        "n": 380,
        "filled": 369,
        "fill_pct": 97.1
      }
    }
  },
  "recent_window_days": 90,
  "recent_breakdown": {
    "Mon": {
      "gap_up": {
        "n": 7,
        "filled": 6,
        "fill_pct": 85.7
      },
      "gap_down": {
        "n": 4,
        "filled": 2,
        "fill_pct": 50
      }
    },
    "Tue": {
      "gap_up": {
        "n": 8,
        "filled": 8,
        "fill_pct": 100
      },
      "gap_down": {
        "n": 4,
        "filled": 4,
        "fill_pct": 100
      }
    },
    "Wed": {
      "gap_up": {
        "n": 9,
        "filled": 9,
        "fill_pct": 100
      },
      "gap_down": {
        "n": 4,
        "filled": 4,
        "fill_pct": 100
      }
    },
    "Thu": {
      "gap_up": {
        "n": 9,
        "filled": 9,
        "fill_pct": 100
      },
      "gap_down": {
        "n": 4,
        "filled": 4,
        "fill_pct": 100
      }
    },
    "Fri": {
      "gap_up": {
        "n": 7,
        "filled": 7,
        "fill_pct": 100
      },
      "gap_down": {
        "n": 6,
        "filled": 6,
        "fill_pct": 100
      }
    }
  }
}

GET/v1/day-brief/{root}

Los hechos del parte diario de la próxima sesión: tamaño esperado, datos programados (hora de Nueva York) y contexto, sin precios.

Parámetros

  • root (path, obligatorio) · ES

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/day-brief/ES"
Respuesta (ejemplo real, recortado)
{
  "v": 1,
  "root": "ES",
  "session": "2026-10-19",
  "data_through": "2026-10-16",
  "today": "2026-10-17",
  "when": "next",
  "contract": "ESZ6",
  "tick": 0.25,
  "size": {
    "source": "model",
    "points": 62,
    "normal_points": 66.25,
    "vs_normal": 0.94,
    "class": "normal",
    "band70": [
      41,
      93.5
    ],
    "band90": [
      31.25,
      125
    ],
    "n_band": 3668,
    "degraded": false,
    "family": "blend_slope",
    "typical_error_pct": 28,
    "scoreboard": {
      "n": 250,
      "from": "2025-10-29",
      "to": "2026-10-16",
      "cover70_pct": 72,
      "cover90_pct": 90.4,
      "typical_error_pct": 28
    },
    "out_of_sample": {
      "n": 2781,
      "from": "2016-01-04",
      "to": "2026-10-16",
      "cover70_pct": 69.4,
      "cover90_pct": 89.6,
      "typical_error_pct": 26.1
    }
  },
  "events": [],
  "chips": [
    {
      "key": "mon",
      "mult": 0.9,
      "ci95": [
        0.85,
        0.95
      ],
      "n": 831,
      "distinct": true
    }
  ],
  "headline_event": {
    "kind": "chip",
    "chip": {
      "key": "mon",
      "mult": 0.9,
      "ci95": [
        0.85,
        0.95
      ],
      "n": 831,
      "distinct": true
    }
  },
  "where": {
    "daily": {
      "state": "balance",
      "sessions": 2
    },
    "picture": {
      "sessions": 20,
      "value": "below",
      "range_pct": 13
    },
    "weekly_state": "balance",
    "source": "panorama"
  },
  "context": {
    "week": {
      "from": "2026-10-12",
      "to": "2026-10-16",
      "exceeds_high_pct": 64,
      "exceeds_low_pct": 40.5,
      "n": 852
    }
  },
  "hour": null,
  "as_of": {
    "session": "2026-10-16",
    "data_through": "2026-10-16",
    "state": "complete"
  },
  "energy_report": null
}

GET/v1/week-ahead/{root}

La semana de un mercado: datos programados, efectos de calendario vigentes y contexto de posicionamiento.

Parámetros

  • root (path, obligatorio) · ES

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/week-ahead/ES"
Respuesta (ejemplo real, recortado)
{
  "v": 1,
  "root": "ES",
  "today": "2026-10-17",
  "week": {
    "monday": "2026-10-19",
    "from": "2026-10-19",
    "to": "2026-10-23",
    "days": [
      "2026-10-19",
      "2026-10-20",
      "... 3 more"
    ],
    "upcoming": true,
    "partial": false,
    "pending": []
  },
  "size_measured": true,
  "events": [
    {
      "date": "2026-10-22",
      "weekday": 3,
      "time_et": "08:30",
      "key": null,
      "name": "Initial Jobless Claims",
      "importance": "media",
      "...": "9 more fields"
    }
  ],
  "headline_event": {
    "kind": "none"
  },
  "calendar": {
    "family": {
      "declared": 86,
      "tested": 86,
      "survivors": 4,
      "q": 0.1
    },
    "registered_on": "2026-10-12",
    "data_through": "2026-10-16",
    "held": [],
    "held_mine": [],
    "active": [
      {
        "effect": "gold_month",
        "variant": "m10",
        "start": "2026-10-01",
        "end": "2026-10-30",
        "sessions": 22,
        "markets": {
          "se_sostiene": [],
          "indeciso": [],
          "no_se_sostiene": [
            "GC"
          ]
        },
        "...": "1 more fields"
      },
      {
        "effect": "vol_index_expiry",
        "variant": null,
        "start": "2026-10-20",
        "end": "2026-10-21",
        "sessions": 2,
        "markets": {
          "se_sostiene": [],
          "indeciso": [],
          "no_se_sostiene": [
            "ES",
            "NQ",
            "... 2 more"
          ]
        },
        "...": "1 more fields"
      },
      "... 1 more"
    ],
    "folded": {
      "groups": 3,
      "indeciso": 0,
      "no_se_sostiene": 6
    }
  },
  "positioning": {
    "report_date": "2026-10-13",
    "published": "2026-10-16",
    "markets": 29,
    "at_extreme": 5,
    "extremes": [
      {
        "instrument": "YM",
        "family": "indices",
        "report": "tff",
        "group": "leveraged",
        "index": 100,
        "side": "long",
        "...": "3 more fields"
      },
      {
        "instrument": "6E",
        "family": "fx",
        "report": "tff",
        "group": "leveraged",
        "index": 0,
        "side": "short",
        "...": "3 more fields"
      },
      "... 1 more"
    ],
    "mine": {
      "instrument": "ES",
      "family": "indices",
      "report": "tff",
      "group": "leveraged",
      "index": 37.9,
      "side": null,
      "...": "3 more fields"
    },
    "evidence": {
      "oos_start": "2022-01-01",
      "tests": 58,
      "holds": 2,
      "markets": 29,
      "n": 514,
      "rank": [
        {
          "group": "managed_money",
          "rho": -0.027,
          "ci95": [
            -0.185,
            0.132
          ],
          "n": 180
        },
        {
          "group": "leveraged",
          "rho": -0.024,
          "ci95": [
            -0.141,
            0.093
          ],
          "n": 334
        }
      ],
      "...": "1 more fields"
    }
  },
  "flows": {
    "auctions": [
      {
        "date": "2026-10-21",
        "weekday": 2,
        "time_et": "13:00",
        "tenor": "20y",
        "reopening": true,
        "market": "ES",
        "...": "4 more fields"
      }
    ],
    "london_fix": null,
    "energy": [
      {
        "report": "crude_inventories",
        "market": "CL",
        "date": "2026-10-21",
        "weekday": 2,
        "time_et": "10:30",
        "window_et": "10:30-11:00",
        "...": "8 more fields"
      },
      {
        "report": "gas_storage",
        "market": "NG",
        "date": "2026-10-22",
        "weekday": 3,
        "time_et": "10:30",
        "window_et": "10:30-11:00",
        "...": "8 more fields"
      }
    ]
  },
  "roll": [
    {
      "root": "ZS",
      "from": "ZSX6",
      "to": "ZSF7",
      "estimated_roll_date": "2026-10-21",
      "status": "in_progress",
      "in_week": true,
      "...": "1 more fields"
    },
    {
      "root": "NG",
      "from": "NGX26",
      "to": "NGZ26",
      "estimated_roll_date": "2026-10-23",
      "status": "in_progress",
      "in_week": true,
      "...": "1 more fields"
    }
  ],
  "week_range": {
    "half_width": 178.5,
    "inside_pct": 81.7,
    "ci95": [
      79,
      84.1
    ],
    "n": 852,
    "tick": 0.25,
    "data_through": "2026-10-16"
  },
  "as_of": {
    "session": "2026-10-16",
    "data_through": "2026-10-16",
    "state": "complete"
  }
}

GET/v1/cot/{instrument}

La última lectura semanal de posicionamiento: netos por grupo, cambio semanal y percentil de un año.

Parámetros

  • instrument (path, obligatorio) · ES

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/cot/ES"
Respuesta (ejemplo real, recortado)
{
  "instrument": "ES",
  "report_date": "2026-10-13",
  "commercial_net": -602358,
  "non_commercial_net": -408726,
  "non_commercial_net_change_1w": 6361,
  "non_commercial_net_percentile_1y": 42.3,
  "commercial_net_change_1w": -1517,
  "cot_index": 64.2,
  "cot_index_weeks": 156,
  "extremes_index": 32.7,
  "extremes_index_weeks": 156,
  "extremes_index_signal": "sin_extremo",
  "asset_manager_net": 915835,
  "asset_manager_net_change_1w": 9220,
  "asset_manager_net_percentile_1y": 32.7,
  "asset_manager_cot_index": 62.5,
  "asset_manager_cot_index_weeks": 156,
  "total_open_interest": 1931607,
  "open_interest_change_1w": -620
}

GET/v1/calendar-effects

Los efectos de calendario declarados de antemano, medidos por mercado y período, con el control de falsos descubrimientos y las próximas ventanas.

Parámetros

  • market (query, opcional) · ES
  • days (query, opcional) · 30

Solicitud

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/calendar-effects?market=ES&days=30"
Respuesta (ejemplo real, recortado)
{
  "version": 1,
  "registered_on": "2026-10-12",
  "data_through": "2026-10-16",
  "family": {
    "declared": 86,
    "tested": 86,
    "survivors": 4,
    "q": 0.1,
    "uncorrected": 14,
    "expected_by_chance": 4.3,
    "method": "benjamini_hochberg"
  },
  "verdicts": {
    "se_sostiene": 4,
    "indeciso": 8,
    "no_se_sostiene": 74
  },
  "costs": "USD 4.50 per round turn + 1 tick per side, in % of notional; one more round turn per contract change inside the window",
  "periods": [
    "full",
    "2016+",
    "... 2 more"
  ],
  "effects": [
    {
      "key": "turn_of_month",
      "order": 1,
      "markets": [
        "ES",
        "NQ",
        "... 3 more"
      ],
      "variants": [],
      "unit": "bp_day",
      "weekly": false,
      "...": "4 more fields"
    },
    {
      "key": "month_end_treasuries",
      "order": 2,
      "markets": [
        "ZT",
        "ZF",
        "... 2 more"
      ],
      "variants": [],
      "unit": "bp_day",
      "weekly": false,
      "...": "4 more fields"
    },
    "... 11 more"
  ],
  "rows": [
    {
      "effect": "turn_of_month",
      "market": "ES",
      "variant": null,
      "unit": "bp_day",
      "weekly": false,
      "measured": true,
      "...": "9 more fields"
    },
    {
      "effect": "pre_holiday",
      "market": "ES",
      "variant": null,
      "unit": "bp_day",
      "weekly": false,
      "measured": true,
      "...": "9 more fields"
    },
    "... 7 more"
  ],
  "today": "2026-10-17",
  "upcoming_days": 30,
  "upcoming": [
    {
      "effect": "vol_index_expiry",
      "variant": null,
      "start": "2026-10-20",
      "end": "2026-10-21",
      "sessions": 2,
      "active": false,
      "...": "3 more fields"
    },
    {
      "effect": "pre_fomc",
      "variant": null,
      "start": "2026-10-27",
      "end": "2026-10-28",
      "sessions": 2,
      "active": false,
      "...": "3 more fields"
    },
    "... 4 more"
  ]
}

Códigos de error

{ "detail": "..." }

  • 401 Clave ausente, inválida o revocada.
  • 403 Tu plan no incluye la API.
  • 404 No hay datos para ese mercado o id.
  • 410 Reporte retirado; la respuesta nombra su reemplazo.
  • 422 Parámetro fuera de rango (por ejemplo days mayor que 120).
  • 429 Límite de la hora agotado; el encabezado Retry-After dice cuántos segundos esperar.

Esquema OpenAPI

El documento OpenAPI 3 de estos endpoints, con sus modelos de respuesta, se pide con la misma clave:

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://cerebro-dalton-platform-api.onrender.com/v1/openapi.json"

El mismo documento, sin clave, como archivo estático: openapi.json (OpenAPI 3)

Retraso y licencia

  • Datos de cierre: cada respuesta lee hasta la última sesión completa del mercado (campo as_of) y se recalcula cada noche. No hay precios en tiempo real.
  • Para tu uso personal: no redistribuyas ni revendas los datos. Son estadística histórica descriptiva, con su n; no son una recomendación de inversión ni de operación.

Versiones

/v1 se mantiene compatible hacia atrás: pueden aparecer campos nuevos, pero ningún campo cambia de nombre ni desaparece. Un cambio que rompa la forma de una respuesta irá a /v2, anunciado antes en Novedades, y /v1 sigue funcionando mientras tanto.