Previsión de sentimiento

GET /forecasts/sentiment
GetSentimentForecast

Hacia dónde es probable que vaya el sentimiento de un activo en las próximas 72 horas, como un rango de resultados con sus probabilidades. series da, cada 4 horas, los posts alcistas, bajistas, neutrales y totales esperados en ese paso y el sentiment_signal al final del mismo, en la escala /sentiment. chance_higher_24h y chance_higher_72h dan la probabilidad de que la señal termine por encima de current_sentiment_signal; sus indicadores _confident marcan cuándo esa probabilidad se inclina claramente hacia un lado.

Las previsiones se actualizan en menos de un minuto desde que hay nuevas publicaciones sobre el activo, y como mínimo cada 15 minutos. refresh=true recalcula con los últimos datos en unos 5 segundos; si tarda más de 20, obtienes la última previsión con refreshed: false, cobrada a 5. Los activos sin previsión devuelven status: not_forecastable con un reason; /forecasts/assets enumera los activos que tienen una.

Cuesta 5 créditos, o 10 con refresh=true. Las respuestas de not_forecastable son gratuitas, hasta 30 por hora y cuenta; superado ese límite, este endpoint devuelve 429 hasta que se reinicie la hora.

El pago con cartera no está disponible para esta operación; usa la autenticación de cuenta. Guía de pago x402.

Parámetros

asset_id string QUERY obligatorio

ID del activo de /assets o /search, como NVDA, GLD, SPX o bitcoin. Envíalo junto con el asset_class que se devolvió con él.

Example:NVDA

asset_class string QUERY obligatorio

Clase del activo nombrado por asset_id: equity (acciones y ETF), commodity, index o crypto. Envía el asset_class que /assets o /search devolvió junto con el asset_id.

Valores permitidos
equitycommodityindexcrypto

Example:equity

refresh boolean QUERY

true recalcula la previsión con los últimos datos: 10 créditos, unos 5 segundos. Por defecto es false.

Example:false

Ejemplo de cURL

curl --get \
  --url 'https://nebula-api.hiddensystems.ai/api/v1/public/forecasts/sentiment' \
  --data-urlencode 'asset_id=NVDA' \
  --data-urlencode 'asset_class=equity' \
  --header 'X-API-Key: YOUR_API_KEY'

Respuestas

200 OK
400 Solicitud incorrecta
401 No autorizado
402 Créditos agotados; la respuesta incluye el momento de renovación y el saldo de créditos comprados
403 Prohibido
404 No encontrado
405 Método no permitido; el encabezado Allow enumera el método admitido
429 Demasiadas solicitudes
500 Error interno del servidor
503 Servicio no disponible

Tipo de medio application/json

as_of
string (date-time) obligatorio

Inicio en UTC de la previsión: el final de los últimos 15 minutos completos a partir de los que se calculó. Null cuando el activo nunca se ha puntuado.

chance_higher_24h
number (double) obligatorio

La probabilidad de que la señal de sentimiento esté más alta que current_sentiment_signal dentro de 24 horas, de 0 a 1.

chance_higher_24h_confident
boolean obligatorio

True cuando chance_higher_24h es inferior a 0.3 o superior a 0.7: el pronóstico se inclina claramente hacia un lado. Más cerca de 0.5, interprétalo como una dirección poco clara.

chance_higher_72h
number (double) obligatorio

La probabilidad de que la señal de sentimiento esté más alta que current_sentiment_signal dentro de 72 horas, de 0 a 1.

chance_higher_72h_confident
boolean obligatorio

True cuando chance_higher_72h es inferior a 0.3 o superior a 0.7: el pronóstico se inclina claramente hacia un lado. Más cerca de 0.5, interprétalo como una dirección poco clara.

current_sentiment_signal
number (double) obligatorio

La señal de sentimiento en as_of, en la escala /sentiment: posts alcistas menos bajistas durante las 24 horas anteriores, con más peso en los posts recientes. Cada trayectoria empieza aquí, y las probabilidades se miden contra este valor. Puede diferir ligeramente del último punto de /sentiment, que es horario.

horizon_hours
integer obligatorio

Con cuánta antelación se ejecuta el pronóstico, en horas: siempre 72.

reason
string obligatorio

Por qué no se puede pronosticar el activo: too_little_history, stale_data o missing_price. Null cuando status es ok.

Valores permitidos
too_little_historystale_datamissing_pricenull
refreshed
boolean obligatorio

True cuando esta solicitud volvió a ejecutar el pronóstico (refresh=true y la re-ejecución terminó a tiempo); false cuando es el último pronóstico programado.

sample_paths
array<array<number (double)>> obligatorio

24 trayectorias posibles para la señal de sentimiento, cada una alineada con series. Dibújalas para mostrar la dispersión de los resultados.

series
array<object> obligatorio

El pronóstico cada 4 horas desde as_of: 18 pasos, del más antiguo al más reciente.

series[].bearish_posts
object obligatorio

Los posts bajistas esperados en este paso de 4 horas únicamente, excluidos los bots: como los posts por intervalo de /sentiment, no sus recuentos de las 24 horas anteriores.

series[].bearish_posts.mean
number (double) obligatorio

El número esperado de posts bajistas en el paso.

series[].bearish_posts.p10
number (double) obligatorio

El percentil 10 de los posts bajistas en el paso.

series[].bearish_posts.p25
number (double) obligatorio

El percentil 25 de los posts bajistas en el paso.

series[].bearish_posts.p50
number (double) obligatorio

El percentil 50 de los posts bajistas en el paso.

series[].bearish_posts.p75
number (double) obligatorio

El percentil 75 de los posts bajistas en el paso.

series[].bearish_posts.p90
number (double) obligatorio

El percentil 90 de las publicaciones bajistas del paso.

series[].bullish_posts
object obligatorio

Las publicaciones alcistas esperadas solo en este paso de 4 horas, excluidos los bots: igual que las publicaciones por intervalo de /sentiment, no que sus recuentos móviles de 24 horas.

series[].bullish_posts.mean
number (double) obligatorio

El número esperado de publicaciones alcistas en el paso.

series[].bullish_posts.p10
number (double) obligatorio

El percentil 10 de las publicaciones alcistas del paso.

series[].bullish_posts.p25
number (double) obligatorio

El percentil 25 de las publicaciones alcistas del paso.

series[].bullish_posts.p50
number (double) obligatorio

El percentil 50 de las publicaciones alcistas del paso.

series[].bullish_posts.p75
number (double) obligatorio

El percentil 75 de las publicaciones alcistas del paso.

series[].bullish_posts.p90
number (double) obligatorio

El percentil 90 de las publicaciones alcistas del paso.

series[].neutral_posts
object obligatorio

Las publicaciones neutrales esperadas solo en este paso de 4 horas, excluidos los bots: igual que las publicaciones por intervalo de /sentiment, no que sus recuentos móviles de 24 horas.

series[].neutral_posts.mean
number (double) obligatorio

El número esperado de publicaciones neutrales en el paso.

series[].neutral_posts.p10
number (double) obligatorio

El percentil 10 de las publicaciones neutrales del paso.

series[].neutral_posts.p25
number (double) obligatorio

El percentil 25 de las publicaciones neutrales del paso.

series[].neutral_posts.p50
number (double) obligatorio

El percentil 50 de las publicaciones neutrales del paso.

series[].neutral_posts.p75
number (double) obligatorio

El percentil 75 de las publicaciones neutrales del paso.

series[].neutral_posts.p90
number (double) obligatorio

El percentil 90 de las publicaciones neutrales del paso.

series[].sentiment_signal
object obligatorio

La señal de sentimiento al final del paso, en la escala de /sentiment: dónde es probable que esté la línea.

series[].sentiment_signal.mean
number (double) obligatorio

La señal de sentimiento esperada al final del paso.

series[].sentiment_signal.p10
number (double) obligatorio

El percentil 10 de la señal de sentimiento al final del paso.

series[].sentiment_signal.p50
number (double) obligatorio

El percentil 50 de la señal de sentimiento al final del paso.

series[].sentiment_signal.p90
number (double) obligatorio

El percentil 90 de la señal de sentimiento al final del paso.

series[].sentiment_signal.quantiles
array<number (double)> obligatorio

21 cuantiles de la señal de sentimiento al final del paso: los percentiles 0, 5, 10, ... 100, de menor a mayor. Interpola entre ellos para obtener la probabilidad de caer en cualquier rango.

series[].timestamp
string (date-time) obligatorio

Hora UTC a la que termina el paso: as_of más 4, 8, ... 72 horas.

series[].total_posts
object obligatorio

Las publicaciones (alcistas, bajistas y neutrales en conjunto) esperadas solo en este paso de 4 horas, excluidos los bots: igual que las publicaciones por intervalo de /sentiment, no que sus recuentos móviles de 24 horas. Sus percentiles son del total en sí, por lo que no son las sumas de los percentiles de los tres tipos.

series[].total_posts.mean
number (double) obligatorio

El número esperado de publicaciones (alcistas, bajistas y neutrales en conjunto) en el paso.

series[].total_posts.p10
number (double) obligatorio

El percentil 10 de las publicaciones (alcistas, bajistas y neutrales en conjunto) del paso.

series[].total_posts.p25
number (double) obligatorio

El percentil 25 de las publicaciones (alcistas, bajistas y neutrales en conjunto) del paso.

series[].total_posts.p50
number (double) obligatorio

El percentil 50 de las publicaciones (alcistas, bajistas y neutrales en conjunto) del paso.

series[].total_posts.p75
number (double) obligatorio

El percentil 75 de las publicaciones (alcistas, bajistas y neutrales en conjunto) del paso.

series[].total_posts.p90
number (double) obligatorio

El percentil 90 de las publicaciones (alcistas, bajistas y neutrales en conjunto) del paso.

status
string obligatorio

ok, o not_forecastable cuando no se puede pronosticar el activo (los campos de resumen son entonces null y la serie está vacía; reason indica por qué).

Valores permitidos
oknot_forecastable
turning
integer obligatorio

1 mientras el sentimiento se inclina al alza (las últimas horas apuntan claramente más al alza que el último día), -1 mientras se inclina a la baja, 0 en caso contrario.

Valores permitidos
-101null
{
  "as_of": "2026-09-14T09:15:00Z",
  "chance_higher_24h": 0.74,
  "chance_higher_24h_confident": true,
  "chance_higher_72h": 0.61,
  "chance_higher_72h_confident": false,
  "current_sentiment_signal": 128.6,
  "horizon_hours": 72,
  "reason": null,
  "refreshed": false,
  "sample_paths": [
    [
      133.2,
      141.7
    ],
    [
      126.4,
      118.9
    ]
  ],
  "series": [
    {
      "bearish_posts": {
        "mean": 18,
        "p10": 9.9,
        "p25": 13.5,
        "p50": 17.1,
        "p75": 21.6,
        "p90": 27.9
      },
      "bullish_posts": {
        "mean": 46,
        "p10": 25.3,
        "p25": 34.5,
        "p50": 43.7,
        "p75": 55.2,
        "p90": 71.3
      },
      "neutral_posts": {
        "mean": 29,
        "p10": 16,
        "p25": 21.8,
        "p50": 27.6,
        "p75": 34.8,
        "p90": 45
      },
      "sentiment_signal": {
        "mean": 131.4,
        "p10": 92.9,
        "p50": 129.6,
        "p90": 175.5,
        "quantiles": [
          21.6,
          70.2,
          92.9,
          104.8,
          113.1,
          119.4,
          124.2,
          127.6,
          130.5,
          132.7,
          134.5,
          136.4,
          138.7,
          141.3,
          144.9,
          149.2,
          155.1,
          163.8,
          179.4,
          202.6,
          287.3
        ]
      },
      "timestamp": "2026-09-14T13:15:00Z",
      "total_posts": {
        "mean": 93,
        "p10": 51.2,
        "p25": 69.8,
        "p50": 88.4,
        "p75": 111.6,
        "p90": 144.2
      }
    },
    {
      "bearish_posts": {
        "mean": 19,
        "p10": 10.5,
        "p25": 14.3,
        "p50": 18.1,
        "p75": 22.8,
        "p90": 29.5
      },
      "bullish_posts": {
        "mean": 50,
        "p10": 27.5,
        "p25": 37.5,
        "p50": 47.5,
        "p75": 60,
        "p90": 77.5
      },
      "neutral_posts": {
        "mean": 31,
        "p10": 17.1,
        "p25": 23.3,
        "p50": 29.5,
        "p75": 37.2,
        "p90": 48.1
      },
      "sentiment_signal": {
        "mean": 137.6,
        "p10": 99.1,
        "p50": 135.79999999999998,
        "p90": 181.7,
        "quantiles": [
          21.6,
          70.2,
          92.9,
          104.8,
          113.1,
          119.4,
          124.2,
          127.6,
          130.5,
          132.7,
          134.5,
          136.4,
          138.7,
          141.3,
          144.9,
          149.2,
          155.1,
          163.8,
          179.4,
          202.6,
          287.3
        ]
      },
      "timestamp": "2026-09-14T17:15:00Z",
      "total_posts": {
        "mean": 100,
        "p10": 55,
        "p25": 75,
        "p50": 95,
        "p75": 120,
        "p90": 155
      }
    }
  ],
  "status": "ok",
  "turning": 0
}