{"openapi":"3.0.3","info":{"title":"CryptoCapi Intelligence API","description":"Inteligencia cripto de CryptoCapi expuesta como API. El núcleo son **tres motores propios** que producen inteligencia derivada, no revenden datos crudos de terceros, y Market Scan, una capa de ranking sobre las señales de Quant Plus:\n\n- **Radar**: sentimiento de mercado anti-alucinación. Un LLM gobernado por un contexto matemático determinista (Python) que tiene la última palabra sobre los números, con sello SHA-256 verificable.\n- **Quant Plus**: análisis técnico y on-chain, con sello reproducible.\n- **Quant Pro**: señal técnica multi-timeframe sobre datos de Binance, con salida determinista sellada.\n- **Market Scan** (no es un motor): rankea el universo curado de Quant Plus por cuánto le falta a cada activo para cruzar **su propio** umbral de anomalía. Vigilancia, no recomendación; devuelve rankings sin sello.\n\nLos endpoints de los motores y de Market Scan requieren API key (`x-api-key`). El historial de señales anclado en Bitcoin (`/history/anchors`) es público, sin clave.\n","version":"1.0.0"},"servers":[{"url":"https://api.cryptocapi.com/v1","description":"Production Server"}],"tags":[{"name":"Radar Engine","description":"Sentimiento de mercado anti-alucinación. Un LLM gobernado por un contexto matemático determinista (Python) que impone la verdad numérica, con sello SHA-256 verificable (process_seal)."},{"name":"Quant Plus Engine","description":"Análisis técnico y on-chain. Métricas estadísticas (Bollinger, Z-Score, régimen de mercado) enriquecidas con datos de cadena, con sello reproducible."},{"name":"Quant Pro Engine","description":"Señal técnica multi-timeframe sobre datos de Binance. Confluencia de indicadores en dos temporalidades (1D y 4H), con salida determinista sellada. Incluye la variante batch para varios símbolos en una sola llamada."},{"name":"Market Scan","description":"Ranking del universo curado de Quant Plus por proximidad al umbral de anomalía de cada activo. Es el único motor que no requiere indicar un activo: responde sin que sepas qué preguntar. Vigilancia, no recomendación."},{"name":"Market","description":"Datos de soporte de mercado: resumen global, precios y detalle de activos."},{"name":"Signal History","description":"El historial de señales, anclado en Bitcoin con OpenTimestamps. Cada día UTC se resume en un manifiesto con una línea `id hoja` por recibo, donde la hoja es el SHA-256 del recibo en JSON canónico (RFC 8785), y la huella del manifiesto queda sellada en un bloque de Bitcoin. Público, sin clave y con CORS abierto: cualquiera baja el manifiesto y la prueba de un día y los verifica en opentimestamps.org. No expone señales ni recibos, solo números de recibo y huellas."}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"JSendSuccess":{"type":"object","properties":{"status":{"type":"string","enum":["success"],"example":"success"},"version":{"type":"string","enum":["1.0.0"],"example":"1.0.0"},"timestamp":{"type":"string","format":"date-time","example":"2026-07-02T14:32:07.000Z"},"data":{"type":"object","description":"The payload data."}}},"JSendError":{"type":"object","properties":{"status":{"type":"string","enum":["error","fail"]},"message":{"type":"string"}}},"HistoryAnchor":{"type":"object","description":"Un día UTC del historial de señales, anclado en Bitcoin con OpenTimestamps.","required":["day","status","row_count","min_id","max_id","id_order","manifest_sha256","bitcoin_block","stamped_at","confirmed_at","manifest_url","ots_url"],"properties":{"day":{"type":"string","format":"date","description":"Día UTC: los recibos grabados en [día 00:00, día+1 00:00) UTC.","example":"2026-10-05"},"status":{"type":"string","enum":["pending","confirmed"],"description":"`pending`: la huella ya está en los calendarios de OpenTimestamps y todavía no tiene bloque. `confirmed`: la prueba trae la atestación de un bloque de Bitcoin.","example":"confirmed"},"row_count":{"type":"integer","minimum":0,"description":"Recibos del día. Un día sin recibos también se ancla, con 0, para que el hueco quede dicho.","example":171},"min_id":{"type":"integer","nullable":true,"description":"Id del recibo en la primera línea del manifiesto; null si el día no tuvo recibos.","example":832},"max_id":{"type":"integer","nullable":true,"description":"Id del recibo en la última línea del manifiesto; null si el día no tuvo recibos. En el 2026-09-30 (`id_order: text`) es 99, no el id más alto del día, que es 166.","example":1002},"id_order":{"type":"string","enum":["numeric","text"],"description":"Orden de las líneas del manifiesto. `numeric` en todos los días salvo el 2026-09-30, el único anclado en orden de id como texto (1, 10, 100, …, 99) por un bug ya corregido. La prueba de ese día vale igual, porque un recibo se busca por su id; lo que cambia es rearmar el manifiesto desde las filas.","example":"numeric"},"manifest_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 del manifiesto: la huella que certifica el .ots.","example":"c15cdbf15241755c8a071be977b13f4f7474c10b3e1e151e70e21e75efb733f1"},"bitcoin_block":{"type":"integer","nullable":true,"description":"Altura del primer bloque de Bitcoin que atestigua la huella; null mientras está pendiente.","example":971261},"stamped_at":{"type":"string","format":"date-time","description":"Cuándo se selló la huella en los calendarios. La fecha probada es la del bloque, no esta."},"confirmed_at":{"type":"string","format":"date-time","nullable":true,"description":"Cuándo se guardó la prueba con su bloque; null mientras está pendiente."},"manifest_url":{"type":"string","example":"/v1/history/anchors/2026-10-05/manifest"},"ots_url":{"type":"string","example":"/v1/history/anchors/2026-10-05/ots"}}},"HistoryAnchorError":{"allOf":[{"$ref":"#/components/schemas/JSendError"},{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_DAY","ANCHOR_NOT_FOUND"],"description":"El contrato es `code`; la prosa de `message` puede cambiar."}}}]},"InsightBase":{"type":"object","description":"Motor RADAR - Vista Pulse (Plan Free). Análisis de sentimiento de mercado.","required":["engine_used","asset","summary","sentiment","statistical_anomaly_detected"],"properties":{"engine_used":{"type":"string","enum":["radar","quant_plus"],"example":"radar"},"asset":{"type":"object","required":["id","symbol"],"properties":{"id":{"type":"string","description":"CoinGecko-style asset id.","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"}}},"summary":{"type":"string","example":"Strong institutional holding at $60k despite dip."},"sentiment":{"type":"string","enum":["bullish","bearish","neutral"],"example":"bullish"},"statistical_anomaly_detected":{"type":"boolean","example":false}}},"InsightDeepAlpha":{"description":"Motor RADAR - Vista Alpha (Plan PRO). Incluye reporte AI completo + diagnósticos estadísticos.","allOf":[{"$ref":"#/components/schemas/InsightBase"},{"type":"object","properties":{"confidence":{"type":"object","properties":{"score":{"type":"number","format":"float","minimum":0,"maximum":1,"example":0.85},"label":{"type":"string","enum":["HIGH","MEDIUM","LOW"],"example":"HIGH"}}},"math_diagnostics":{"type":"object","description":"Diagnósticos matemáticos del Motor QUANT combinados con el insight de AI.","properties":{"z_score":{"type":"number","example":0.53},"z_score_threshold":{"type":"number","example":3},"bollinger_bandwidth":{"type":"number","example":0.0128},"market_regime":{"type":"string","enum":["BULLISH_TREND","RANGING_CHOP","BEARISH_TREND","EXTREME_VOLATILITY","UNUSUAL_VOLATILITY"],"example":"RANGING_CHOP"},"extreme_volatility_detected":{"type":"boolean","example":false},"data_quality":{"type":"string","enum":["OPTIMAL","PARTIAL","INSUFFICIENT"],"example":"OPTIMAL"},"data_quality_reason":{"type":"array","items":{"type":"string"},"example":[]},"sentiment_override":{"type":"boolean","example":false},"anomaly_details":{"type":"string","nullable":true,"example":null},"regime_thresholds":{"type":"object","description":"Umbrales dinámicos usados para clasificar el régimen (opcional).","additionalProperties":{"type":"number"},"example":{"volatility_hard_limit":0.05,"z_score_anomaly_boundary":3.5051,"daily_change_trend_boundary":0.02}},"audit_trail":{"type":"object","description":"Sello verificable de anti-alucinación. Presente en todos los motores. El `seal_type` indica qué garantiza: Radar emite `process_seal` (con `filters_applied`/`fields_overridden`); Quant Plus emite `reproducible` (con `data_source`/`input_vector` para recomputar).\n","properties":{"protocol_hash":{"type":"string","description":"SHA-256 de los inputs del sello. Verificable de forma independiente.","example":"0x8ac8aee2cc176fcfaefb6890b4c3e6af..."},"calculated_at":{"type":"string","format":"date-time","example":"2026-07-02T14:30:00.516360Z"},"seal_type":{"type":"string","enum":["process_seal","reproducible","output_seal"],"description":"process_seal = Radar; reproducible = Quant Plus.","example":"process_seal"},"algorithm_id":{"type":"string","example":"Radar 4-Layer Anti-Hallucination Pipeline"},"engine_version":{"type":"string","example":"v2.1.0-radar"},"filters_applied":{"type":"array","items":{"type":"string"},"description":"Radar (process_seal): filtros anti-alucinación que se dispararon.","example":["LEY 7 volume","band position"]},"fields_overridden":{"type":"array","items":{"type":"string"},"description":"Radar (process_seal): campos que el motor determinista sobreescribió al LLM.","example":["analysis.confidence","sentiment"]},"sentiment_override":{"type":"boolean","example":false},"data_source":{"type":"object","description":"Quant Plus (reproducible) únicamente.","properties":{"symbol":{"type":"string","example":"BTCUSDT"},"vendor":{"type":"string","example":"CoinGecko"},"timeframe":{"type":"string","example":"1h"}}},"input_timestamps":{"type":"array","items":{"type":"string"},"description":"Quant Plus (reproducible) únicamente."},"input_vector":{"type":"array","items":{"type":"number"},"description":"Quant Plus (reproducible) únicamente. Vector de precios para recomputar Z-Score/Bollinger."}}}}},"actionable_insight":{"type":"object","description":"Señal operativa determinista generada por el Math Engine. Exclusivo Quant Plus.","properties":{"signal":{"type":"string","enum":["BUY","SELL","HOLD","WATCH"],"example":"HOLD"},"risk_level":{"type":"string","enum":["LOW","MEDIUM","HIGH","CRITICAL"],"example":"LOW"},"trigger_condition":{"type":"string","example":"Mercado en consolidación — esperar z_score > 0.5 o < -0.5"}}},"onchain_stats":{"type":"object","description":"Métricas On-Chain avanzadas y alertas (exclusivo de Quant Plus).","properties":{"network":{"type":"string","example":"ethereum"},"mvrv_ratio":{"type":"number","example":1.25},"exchange_netflow_usd":{"type":"number","example":-50000000},"active_addresses_24h":{"type":"number","example":450000},"whale_activity_alert":{"type":"boolean","example":true},"gas_price_gwei":{"type":"number","example":15.5},"network_congestion":{"type":"string","enum":["LOW","MEDIUM","HIGH"],"example":"MEDIUM"},"onchain_confidence_score":{"type":"number","example":0.92}}},"analysis":{"type":"object","description":"Detailed AI analysis object","properties":{"detailed_report":{"type":"string"},"sources_verified":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"credibility":{"type":"string","enum":["Tier 1","Tier 2","Tier 3"]}}}},"sources_window":{"type":"string","description":"Ventana temporal de las fuentes consultadas.","example":"24h"}}}}}]},"MarketSummary":{"type":"object","properties":{"total_market_cap":{"type":"number"},"total_volume_24h":{"type":"number"},"btc_dominance":{"type":"number"},"fear_greed_index":{"type":"integer"},"last_updated":{"type":"string","format":"date-time"}}},"AssetDetail":{"type":"object","properties":{"id":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"current_price":{"type":"number"},"market_cap":{"type":"number"},"market_cap_rank":{"type":"integer"},"price_change_percentage_24h":{"type":"number"},"image":{"type":"object","properties":{"large":{"type":"string"}}}}},"IndicatorSignals":{"type":"object","description":"Puntuaciones individuales de cada indicador técnico sobre una base de 100 puntos.","properties":{"ema_cross_score":{"type":"integer","description":"Aceleración de tendencia (Cruce de EMAs). Rango: 0 (bajista), 15 (mixto) a 30 (alcista).","example":30},"rsi_score":{"type":"integer","description":"Oscilador de Momentum (RSI). Rango: 0 (bajista) a 20 (fuerte alcista).","example":10},"macd_score":{"type":"integer","description":"Cruce de la línea MACD con su señal. Valores: 0 (por debajo, bajista) o 20 (por encima, alcista).","example":20},"bollinger_score":{"type":"integer","description":"Compresión de volatilidad (Squeeze). Rango: -10 (amplificador bajista) a 10 (amplificador alcista).","example":-10},"kalman_score":{"type":"integer","description":"Filtro de Kalman adaptativo. Rango: 0 (precio bajo estimación) a 30 (precio sobre estimación).","example":0}}},"MIRDiagnostics":{"type":"object","description":"Market Intelligence Report - Diagnóstico del proceso de resolución de la señal de convergencia.","properties":{"base_raw_score":{"type":"integer","description":"Puntuación (0-100) que resuelve la matriz entre los dos timeframes, antes del fail-safe de datos.","example":65},"insufficient_data":{"type":"boolean","description":"True si algún timeframe tiene menos de 50 velas (un listado nuevo): la distancia del score a 50 se reduce a la mitad.","example":false},"conviction_multiplier":{"type":"number","description":"Multiplicador aplicado a la distancia del score a 50: 1, o 0.5 cuando insufficient_data es true.","example":1},"explanation":{"type":"string","description":"Explicación del multiplicador aplicado.","example":"Sin contracción de convicción: las dos temporalidades tienen al menos 50 velas."}}},"ConfluenceScore":{"type":"object","description":"Puntuación de confluencia para un timeframe específico (Escala 0-100).","properties":{"timeframe":{"type":"string","enum":["4h","1d"],"example":"1d"},"confluence_score":{"type":"integer","description":"Score total de confluencia: 0 (strong sell) a 100 (strong buy). 50 es neutralidad.","example":30},"signal":{"type":"string","enum":["STRONG_BUY","BUY","NEUTRAL_CHOP","SELL","STRONG_SELL"],"description":"Señal final para este timeframe.","example":"BUY"},"indicators":{"$ref":"#/components/schemas/IndicatorSignals"},"candle_count":{"type":"integer","description":"Velas que devolvió Binance para este timeframe (se piden 500 diarias o 1000 de 4 h). Con menos de 50 se activa el fail-safe de datos.","example":500},"timestamp":{"type":"string","format":"date-time"}}},"QuantScanItem":{"type":"object","description":"Resultado de un activo en el Market Scan (señal Quant Plus pre-computada).","properties":{"asset":{"type":"object","properties":{"id":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","description":"Ticker en minúsculas (`btc`, `eth`), NO el par de trading.","example":"btc"}}},"signal":{"type":"string","nullable":true,"enum":["STRONG_BUY","BUY","BUY_WATCH","HOLD","SELL_WATCH","SELL","STRONG_SELL","ALERT"],"example":"HOLD"},"sentiment":{"type":"string","nullable":true,"enum":["bullish","bearish","neutral"],"example":"bullish"},"z_score":{"type":"number","nullable":true,"example":2.45},"market_regime":{"type":"string","nullable":true,"enum":["BULLISH_TREND","BEARISH_TREND","RANGING_CHOP","UNUSUAL_VOLATILITY","EXTREME_VOLATILITY"],"example":"BULLISH_TREND"},"threshold_proximity":{"type":"number","nullable":true,"description":"Eje primario del ranking. `|z_score| / z_score_anomaly_boundary`, adimensional y comparable entre activos: cuán cerca está de disparar su propio umbral de anomalía. 1.0 = está disparando. `null` si el umbral no está persistido (la fila cae al final).","example":0.39},"evidence_weight":{"type":"number","nullable":true,"description":"Segundo eje del ranking, independiente del z-score. `min(data_points_analyzed / 50, 1.0)`: cuánta muestra sostiene la medición. `null` si no hay muestra persistida.","example":1},"confidence":{"type":"object","properties":{"score":{"type":"number","example":0.92},"label":{"type":"string","enum":["HIGH","MEDIUM","LOW"],"example":"HIGH"}}},"risk_level":{"type":"string","nullable":true,"enum":["LOW","MEDIUM","HIGH","CRITICAL"],"example":"MEDIUM"},"trigger_condition":{"type":"string","nullable":true,"example":"Z-Score en -0.67. Señal HOLD en régimen RANGING_CHOP — requiere |z| >= 3.51 para activar BUY_WATCH/SELL_WATCH, o régimen EXTREME_VOLATILITY para ALERT."},"summary":{"type":"string","nullable":true,"example":"Bitcoin en zona de acumulación estadística."},"current_price":{"type":"number","nullable":true,"example":71234.5},"price_change_percentage_24h":{"type":"number","nullable":true,"example":2.34},"generated_at":{"type":"string","format":"date-time","example":"2026-05-28T20:30:00Z"}}},"QuantBatchItem":{"type":"object","description":"Resultado de un símbolo en el Batch API. available=false cuando no hay señal pre-computada.","properties":{"asset":{"type":"object","properties":{"id":{"type":"string","nullable":true,"example":"bitcoin"},"symbol":{"type":"string","example":"BTCUSDT"}}},"available":{"type":"boolean","description":"False si el símbolo no tiene señal pre-computada en la DB.","example":true},"signal":{"type":"string","nullable":true,"example":"BUY_WATCH"},"sentiment":{"type":"string","nullable":true,"example":"bullish"},"z_score":{"type":"number","nullable":true,"example":1.87},"market_regime":{"type":"string","nullable":true,"example":"BULLISH_TREND"},"confidence":{"type":"object","nullable":true,"properties":{"score":{"type":"number","example":0.78},"label":{"type":"string","example":"HIGH"}}},"risk_level":{"type":"string","nullable":true,"example":"LOW"},"trigger_condition":{"type":"string","nullable":true,"example":"Retroceso sano en tendencia alcista."},"summary":{"type":"string","nullable":true,"example":"Ethereum rebota desde soporte con setup técnico limpio."},"generated_at":{"type":"string","nullable":true,"format":"date-time","example":"2026-05-28T20:25:00Z"}}},"QuantSignalResponse":{"type":"object","description":"Respuesta completa del Motor QUANT con análisis multi-timeframe.","properties":{"status":{"type":"string","enum":["success"],"example":"success"},"version":{"type":"string","example":"1.0.0"},"timestamp":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"asset":{"type":"object","properties":{"id":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTCUSDT"}}},"symbol":{"type":"string","example":"BTCUSDT"},"resolved_signal":{"type":"string","enum":["STRONG_BUY","BUY","NEUTRAL_CHOP","SELL","STRONG_SELL"],"description":"Señal FINAL multi-timeframe resuelta por el MIR (Market Intelligence Report).","example":"BUY"},"resolved_score":{"type":"integer","description":"Score final de la matriz MIR, de 0 a 100. Con insufficient_data, su distancia a 50 se reduce a la mitad.","example":65},"mir_diagnostics":{"$ref":"#/components/schemas/MIRDiagnostics"},"macro_1d":{"$ref":"#/components/schemas/ConfluenceScore"},"micro_4h":{"$ref":"#/components/schemas/ConfluenceScore"},"version":{"type":"string","example":"v1.2.0-quant"},"audit_trail":{"type":"object","description":"Sello de Quant Pro (output_seal): SHA-256 sobre las salidas deterministas del motor, sin marca de tiempo.","properties":{"protocol_hash":{"type":"string","example":"0xbffe1e8746bffdfba216cbff2490d5d077754a2827edddb99656abb90d9e3ab6"},"calculated_at":{"type":"string","format":"date-time"},"algorithm_id":{"type":"string","example":"Kalman-Adaptive + Confluence (Dual-Timeframe MIR)"},"engine_version":{"type":"string","example":"v1.2.0-quant"},"seal_type":{"type":"string","enum":["output_seal"]}}}}}}}}},"paths":{"/market/market-summary":{"get":{"tags":["Market"],"summary":"Get Market Summary","description":"Retrieve global market metrics like total market cap and BTC dominance.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketSummary"}}}}}}},"/market/prices/latest":{"get":{"tags":["Market"],"summary":"Get Latest Prices","description":"List assets with their latest market prices and rankings, ordered by market cap. Omitting `limit` returns the first 50, not the whole tracked universe.","parameters":[{"in":"query","name":"limit","description":"Assets to return. Omitted means 50; values above the maximum are clamped.","schema":{"type":"integer","default":50,"minimum":1,"maximum":300}},{"in":"query","name":"page","schema":{"type":"integer","default":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetDetail"}}}}}}}},"/market/assets/{id}":{"get":{"tags":["Market"],"summary":"Get Asset Details","description":"Retrieve detailed information for a specific cryptocurrency.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The asset ID (e.g., bitcoin)"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDetail"}}}},"404":{"description":"Asset not found"}}}},"/history/anchors":{"get":{"tags":["Signal History"],"summary":"List the anchored days","description":"Cada día del historial de señales anclado en Bitcoin, del más viejo al más nuevo, con los pendientes incluidos. Trae la huella de cada manifiesto, el bloque y dónde bajar el manifiesto y la prueba; no trae señales ni recibos. Público, sin clave y con CORS abierto. Caché de 5 minutos: cambia como mucho una vez por hora.","operationId":"listHistoryAnchors","responses":{"200":{"description":"Un elemento por día anclado.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/JSendSuccess"},{"type":"object","properties":{"data":{"type":"object","required":["count","anchors"],"properties":{"count":{"type":"integer","example":1},"anchors":{"type":"array","items":{"$ref":"#/components/schemas/HistoryAnchor"}}}}}}]}}}}}}},"/history/anchors/{day}/manifest":{"get":{"tags":["Signal History"],"summary":"Download a day's manifest","description":"El manifiesto del día, byte por byte: su SHA-256 es `manifest_sha256`, la huella que certifica el .ots. Una cabecera `cryptocapi-signal-ledger v1 day=AAAA-MM-DD rows=N` y una línea `id hoja` por recibo, cada línea terminada en LF. Se sirve como `manifiesto-AAAA-MM-DD.txt` y no cambia nunca, así que se cachea un año.","operationId":"getHistoryAnchorManifest","parameters":[{"in":"path","name":"day","required":true,"schema":{"type":"string","format":"date"},"description":"Día UTC, AAAA-MM-DD.","example":"2026-10-05"}],"responses":{"200":{"description":"El manifiesto.","content":{"text/plain":{"schema":{"type":"string"},"example":"cryptocapi-signal-ledger v1 day=2026-10-05 rows=171\n832 51cbdf0ebbeea1a4f385bdc93f65979e03384d44b791d2766b586c8aec840593\n833 25395e27afbe95f470c8942a5370930239180ddaffcb6b53acff726b23436170\n"}}},"400":{"description":"`INVALID_DAY`: el día no es una fecha AAAA-MM-DD real.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryAnchorError"}}}},"404":{"description":"`ANCHOR_NOT_FOUND`: ese día no está anclado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryAnchorError"}}}}}}},"/history/anchors/{day}/ots":{"get":{"tags":["Signal History"],"summary":"Download a day's OpenTimestamps proof","description":"La prueba de OpenTimestamps del manifiesto, como descarga: `manifiesto-AAAA-MM-DD.txt.ots`, el nombre con que opentimestamps.org la empareja con el manifiesto. Con los dos archivos, opentimestamps.org dice el bloque y la fecha sin instalar nada: primero el .ots y después el manifiesto, porque al revés lo vuelve a sellar en vez de verificarlo. Caché de 5 minutos mientras está pendiente (la prueba se completa una vez, cuando llega el bloque) y de un año cuando ya lo tiene.","operationId":"getHistoryAnchorProof","parameters":[{"in":"path","name":"day","required":true,"schema":{"type":"string","format":"date"},"description":"Día UTC, AAAA-MM-DD.","example":"2026-10-05"}],"responses":{"200":{"description":"La prueba .ots.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"`INVALID_DAY`: el día no es una fecha AAAA-MM-DD real.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryAnchorError"}}}},"404":{"description":"`ANCHOR_NOT_FOUND`: ese día no está anclado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryAnchorError"}}}}}}},"/market/insights/{id}":{"get":{"tags":["Radar Engine"],"summary":"RADAR: Get AI Market Insight","description":"**Motor RADAR** - Inteligencia de sentimiento basada en IA (GPT-OSS 120B).\n\n- **view=pulse** (Free): Devuelve `summary`, `sentiment` y `statistical_anomaly_detected`.\n- **view=alpha** (PRO): Devuelve el análisis completo con `math_diagnostics` (Z-Score, Bollinger, régimen) y reporte detallado con fuentes verificadas.\n","operationId":"getInsight","security":[{"ApiKeyAuth":[]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The asset slug (e.g., bitcoin, ethereum, solana)","example":"bitcoin"},{"in":"query","name":"view","schema":{"type":"string","enum":["pulse","alpha"],"default":"pulse"},"description":"\"pulse\": Resumen de sentimiento (Free). \"alpha\": Análisis profundo con diagnósticos matemáticos (PRO)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/JSendSuccess"},{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/InsightBase"},{"$ref":"#/components/schemas/InsightDeepAlpha"}]}}}]}}}},"401":{"description":"Unauthorized - API key missing"},"403":{"description":"Forbidden - Plan insufficient for alpha view"},"404":{"description":"Insight not found"}}}},"/quant-plus/{id}/signal":{"get":{"tags":["Quant Plus Engine"],"summary":"QUANT PLUS: Technical + On-Chain Insight","description":"**Motor QUANT PLUS** - Motor Estadístico Determinista y de Telemetría On-Chain (Zero-AI).\n\nDevuelve la señal operativa matemática, nivel de riesgo, matriz de diagnóstico On-Chain y la traza de auditoría completa (audit_trail).\n","operationId":"getQuantPlusInsight","security":[{"ApiKeyAuth":[]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The asset slug (e.g., bitcoin, ethereum, solana)","example":"bitcoin"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/JSendSuccess"},{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/InsightBase"},{"$ref":"#/components/schemas/InsightDeepAlpha"}]}}}]},"example":{"status":"success","version":"1.0.0","timestamp":"2026-05-10T20:38:44.560Z","data":{"engine_used":"quant_plus","asset":{"id":"bitcoin","symbol":"BTC"},"summary":"Lateralización de rango.","sentiment":"neutral","statistical_anomaly_detected":false,"confidence":{"score":0.61,"label":"MEDIUM"},"actionable_insight":{"signal":"HOLD","risk_level":"LOW","trigger_condition":"Mercado en consolidación — esperar z_score > 0.5 o < -0.5"},"onchain_stats":{"network":"bitcoin-mainnet","mvrv_ratio":null,"network_congestion":"LOW","whale_activity_alert":false,"onchain_confidence_score":0.6},"math_diagnostics":{"z_score":0.0782,"z_score_threshold":3.6594,"bollinger_bandwidth":0.0884,"market_regime":"RANGING_CHOP","extreme_volatility_detected":false,"data_quality":"OPTIMAL","sentiment_override":false,"audit_trail":{"data_source":{"vendor":"Yahoo Finance (51d Daily)","timeframe":"1d (50-period log_returns Z-Score)"},"calculated_at":"2026-05-10T20:38:42.680495Z","protocol_hash":"0xc99a56b44e0f1a5d...36514b32"}},"analysis":{"detailed_report":"El precio opera cerca de la banda superior de Bollinger (0.85) con ancho de banda en compresión (-0.31%), indicando consolidación."}}}}}},"401":{"description":"Unauthorized - API key missing"},"403":{"description":"Forbidden - Plan insufficient for alpha view"},"404":{"description":"Insight not found"}}}},"/quant/{symbol}/signal":{"get":{"tags":["Quant Pro Engine"],"summary":"QUANT PRO: Get Multi-Timeframe Technical Signal","description":"**Motor QUANT** - Señales técnicas cuantitativas multi-timeframe. **Requiere plan PRO.**\n\nCalcula indicadores técnicos (EMA, RSI, MACD, Bollinger, Kalman) en dos timeframes:\n- **macro_1d**: Análisis diario (tendencia macro)\n- **micro_4h**: Análisis de 4 horas (timing de entrada)\n\nEl **MIR (Market Intelligence Report)** fusiona ambos timeframes con una regla por caso: aceleración,\nretroceso en tendencia alcista, rebote falso y colapso sincronizado. Si algún timeframe tiene menos\nde 50 velas, la distancia del score a 50 se reduce a la mitad (`mir_diagnostics.insufficient_data`).\n\n**Señales posibles:** `STRONG_BUY` (>= 85) | `BUY` (65-84) | `NEUTRAL_CHOP` (35-64) | `SELL` (16-34) | `STRONG_SELL` (< 16)\n\nLa señal mide cuántos indicadores coinciden: STRONG es una confluencia alta, no una probabilidad ni un pronóstico.\n\n**Formato del symbol:** Par de trading con sufijo USDT (BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT)\n","operationId":"getQuantSignal","security":[{"ApiKeyAuth":[]}],"parameters":[{"in":"path","name":"symbol","required":true,"schema":{"type":"string"},"description":"Par de trading con sufijo USDT","example":"BTCUSDT"}],"responses":{"200":{"description":"Señal Quant generada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantSignalResponse"},"example":{"status":"success","version":"1.0.0","timestamp":"2026-10-03T14:51:37.356Z","data":{"asset":{"id":"btc","symbol":"BTCUSDT"},"symbol":"BTCUSDT","resolved_signal":"BUY","resolved_score":65,"mir_diagnostics":{"base_raw_score":65,"insufficient_data":false,"conviction_multiplier":1,"explanation":"Sin contracción de convicción: las dos temporalidades tienen al menos 50 velas."},"macro_1d":{"timeframe":"1d","confluence_score":65,"signal":"BUY","indicators":{"ema_cross_score":30,"rsi_score":20,"macd_score":0,"bollinger_score":0,"kalman_score":15},"candle_count":500,"timestamp":"2026-10-03T14:51:36.832706Z"},"micro_4h":{"timeframe":"4h","confluence_score":55,"signal":"NEUTRAL_CHOP","indicators":{"ema_cross_score":30,"rsi_score":10,"macd_score":0,"bollinger_score":0,"kalman_score":15},"candle_count":1000,"timestamp":"2026-10-03T14:51:37.356404Z"},"version":"v1.2.0-quant","audit_trail":{"protocol_hash":"0xbffe1e8746bffdfba216cbff2490d5d077754a2827edddb99656abb90d9e3ab6","calculated_at":"2026-10-03T14:51:37.356754Z","algorithm_id":"Kalman-Adaptive + Confluence (Dual-Timeframe MIR)","engine_version":"v1.2.0-quant","seal_type":"output_seal"}}}}}},"401":{"description":"Unauthorized - API key missing"},"403":{"description":"Forbidden - PRO plan required"},"502":{"description":"El motor Quant devolvió una respuesta inválida o vacía"},"503":{"description":"No se pudo conectar al Motor Quant (contenedor collector offline)"}}}},"/quant/market-scan":{"get":{"tags":["Market Scan"],"summary":"MARKET SCAN: Rankings Proactivos por Estrategia","description":"**Motor Market Scan** — Ranking ordenado de activos por señal Quant Plus. **Requiere plan PRO.**\n\nLee señales pre-computadas de la DB (sin latencia de cálculo) y devuelve los top N activos\ndel universo de Quant Plus.\n\n\nUn `z_score` crudo no es comparable entre activos: está normalizado contra la historia de\n**cada uno**, así que el 0.66 de una stablecoin y el 1.37 de bitcoin miden desvíos de\ndistribuciones de tamaños distintos. El ranking usa dos magnitudes que sí son comparables:\n\n- **`threshold_proximity`** = `|z_score| / z_score_anomaly_boundary`. Adimensional. Mide\n  cuán cerca está el activo de disparar **su propio** umbral de anomalía (t-Student con\n  alpha=0.001, calculado por activo según su tamaño de muestra). `1.0` significa que está\n  disparando; `0.4`, que va por el 40% del camino.\n- **`evidence_weight`** = `min(data_points_analyzed / 50, 1.0)`. Cuánta muestra sostiene la\n  medición. Es **independiente** del z-score, y por eso aporta un eje real y no una copia.\n\nAmbos viajan en cada resultado: si ordenamos por ellos, podés reproducir el orden.\n\n\n- **aggressive**: `threshold_proximity` desc. Convicción pura, sin ponderar cuánta evidencia\n  la sostiene.\n- **conservative**: `evidence_weight` desc, desempata por proximidad. La evidencia manda.\n- **balanced** (default): `threshold_proximity * evidence_weight` desc, desempata por\n  proximidad. Convicción ponderada por evidencia.\n\n**La estrategia cambia el orden, no filtra.** Las tres devuelven el mismo conjunto de\nactivos (los que tienen señal Quant Plus de menos de 24 h y `market_cap_rank` conocido) y\nvarían solo el criterio de ranking. Si necesitás un subconjunto, filtrá del lado del\ncliente por `signal`, `threshold_proximity` o `market_regime`.\n\n**Alcance.** El universo es el curado de Quant Plus (hasta ~15 activos), no el mercado\ncompleto. Un activo sin umbral o sin muestra persistidos devuelve el eje en `null` y cae al\nfinal del ranking: no se le inventa un valor por defecto.\n\n**Activos anclados.** Las stablecoins quedan fuera del ranking mientras su ancla aguanta.\nUn z-score sobre un activo pegged mide ruido alrededor del ancla (su desviación estándar es\nminúscula, así que un movimiento irrelevante produce un z alto) y le robaría el puesto a un\nactivo con señal real. **Si se despegan más de un 1% en 24 h vuelven a entrar**, porque en\nese caso el depeg es la señal más importante que pueden dar.\n\nIdeal para dashboards, newsletters automáticas y bots que siguen ese universo sin hacer una\nllamada por cada activo.\n","operationId":"getMarketScan","security":[{"ApiKeyAuth":[]}],"parameters":[{"in":"query","name":"strategy","schema":{"type":"string","enum":["aggressive","balanced","conservative"],"default":"balanced"},"description":"Criterio de ranking; no filtra el conjunto. aggressive=threshold_proximity desc, conservative=evidence_weight desc, balanced=producto de ambos.","example":"aggressive"},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"description":"Número máximo de activos a devolver (1-50).","example":10}],"responses":{"200":{"description":"Ranking generado exitosamente","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"version":{"type":"string","example":"1.0.0"},"timestamp":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"strategy":{"type":"string","example":"aggressive"},"count":{"type":"integer","example":10},"results":{"type":"array","items":{"$ref":"#/components/schemas/QuantScanItem"}}}}}},"example":{"status":"success","version":"1.0.0","timestamp":"2026-05-28T20:51:17.598Z","data":{"strategy":"aggressive","count":2,"results":[{"asset":{"id":"bitcoin","symbol":"btc"},"signal":"HOLD","sentiment":"bullish","z_score":1.3737,"market_regime":"RANGING_CHOP","threshold_proximity":0.3919,"evidence_weight":1,"confidence":{"score":0.69,"label":"MEDIUM"},"risk_level":"LOW","trigger_condition":"Z-Score en 1.37. Señal HOLD en régimen RANGING_CHOP — requiere |z| >= 3.51 para activar BUY_WATCH/SELL_WATCH, o régimen EXTREME_VOLATILITY para ALERT.","summary":"Lateralización en bandas normales, con leve presión alcista.","current_price":64063,"price_change_percentage_24h":1.7,"generated_at":"2026-08-17T16:02:24.247Z"},{"asset":{"id":"zcash","symbol":"zec"},"signal":"HOLD","sentiment":"bullish","z_score":1.2335,"market_regime":"BULLISH_TREND","threshold_proximity":0.3519,"evidence_weight":1,"confidence":{"score":0.88,"label":"MEDIUM"},"risk_level":"MEDIUM","trigger_condition":"Z-Score en 1.23. Señal HOLD en régimen BULLISH_TREND — requiere |z| >= 3.51 para activar BUY_WATCH/SELL_WATCH, o régimen EXTREME_VOLATILITY para ALERT.","summary":"Continuidad de tendencia alcista.","current_price":511.87,"price_change_percentage_24h":3.8,"generated_at":"2026-08-17T15:05:13.017Z"}]}}}}},"401":{"description":"Unauthorized - API key missing"},"403":{"description":"Forbidden - PRO plan required"}}}},"/quant/batch":{"post":{"tags":["Quant Pro Engine"],"summary":"QUANT PRO BATCH: Señales Multi-Symbol en una Llamada","description":"**Batch API** — Obtén señales Quant Plus para hasta 50 símbolos en una sola petición. **Requiere plan PRO.**\n\nCada item del array `results` incluye un flag `available` que indica si existe señal\npre-computada para ese símbolo. Los símbolos sin señal devuelven `available: false`\ncon el resto de campos en `null`.\n","operationId":"getBatchSignals","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["symbols"],"properties":{"symbols":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string"},"description":"CoinGecko coin IDs (ej. bitcoin, ethereum, solana)","example":["bitcoin","ethereum","solana"]}}}}}},"responses":{"200":{"description":"Batch procesado exitosamente","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"version":{"type":"string","example":"1.0.0"},"timestamp":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"requested":{"type":"integer","description":"Total de símbolos solicitados.","example":3},"available":{"type":"integer","description":"Símbolos con señal pre-computada en la DB.","example":2},"results":{"type":"array","items":{"$ref":"#/components/schemas/QuantBatchItem"}}}}}},"example":{"status":"success","version":"1.0.0","timestamp":"2026-09-30T23:41:08.000Z","data":{"requested":3,"available":2,"results":[{"asset":{"id":"bitcoin","symbol":"btc"},"available":true,"signal":"HOLD","z_score":-0.269,"market_regime":"RANGING_CHOP","confidence":{"score":0.62,"label":"MEDIUM"},"risk_level":"LOW","trigger_condition":"Z-Score en -0.27. Señal HOLD en régimen RANGING_CHOP — requiere |z| >= 3.51 para activar BUY_WATCH/SELL_WATCH, o régimen EXTREME_VOLATILITY para ALERT.","summary":"Equilibrio técnico. Z-Score -0.27, al 8% de su umbral de anomalía (3.51).","generated_at":"2026-09-30T23:05:00Z"},{"asset":{"id":"ethereum","symbol":"eth"},"available":true,"signal":"HOLD","z_score":-0.142,"market_regime":"RANGING_CHOP","confidence":{"score":0.61,"label":"MEDIUM"},"risk_level":"LOW","trigger_condition":"Z-Score en -0.14. Señal HOLD en régimen RANGING_CHOP — requiere |z| >= 3.51 para activar BUY_WATCH/SELL_WATCH, o régimen EXTREME_VOLATILITY para ALERT.","summary":"Equilibrio técnico. Z-Score -0.14, al 4% de su umbral de anomalía (3.51).","generated_at":"2026-09-30T23:05:00Z"},{"asset":{"id":"solana","symbol":null},"available":false,"signal":null,"z_score":null,"market_regime":null,"confidence":null,"risk_level":null,"trigger_condition":null,"summary":null,"generated_at":null}]}}}}},"400":{"description":"Bad Request - symbols array vacío o inválido"},"401":{"description":"Unauthorized - API key missing"},"403":{"description":"Forbidden - PRO plan required"}}}}}}