SYNDRA

API-first · self-hosted · no GUIAPI-first · autoalojado · sin GUI

Financial news, processed by locally-run NLP and served as a versioned REST API. Noticias financieras, procesadas con NLP local y servidas como una API REST versionada.

Syndra deploys inside your own infrastructure. FinBERT scores sentiment and all-MiniLM-L6-v2 builds the embeddings on your hardware. Every response is governed by a strict Pydantic contract, and your data never transits a third party. Syndra se despliega dentro de tu propia infraestructura. FinBERT calcula el sentimiento y all-MiniLM-L6-v2 genera los embeddings en tu hardware. Cada respuesta está gobernada por un contrato Pydantic estricto y tus datos nunca pasan por un tercero.

No trading signals. No dashboard. A data feed for engineers. Sin señales de trading. Sin dashboard. Un feed de datos para ingeniería.

GET /api/v1/sentiment/AAPL
{
  "ticker": "AAPL",
  "sentiment_label": "positive",
  "sentiment_score": 0.6142,
  "article_count": 37,
  "time_window": "24h"
}
positive P(pos) − P(neg)
50,000+

Articles ingested and enrichedArtículos ingeridos y enriquecidos

100%

Processing rate: 0 failed, 0 pendingTasa de procesado: 0 fallidos, 0 pendientes

350500

Articles per day, unattended, 12+ daysArtículos por día, sin supervisión, 12+ días

<300ms

p95 semantic search latencyLatencia p95 de búsqueda semántica

01 / The problemEl problema

Financial data teams have three bad options. Los equipos de datos financieros tienen tres malas opciones.

OptionOpción What breaksQué falla CostCoste
Bloomberg / Refinitiv Priced for institutions. Terminal-shaped, not pipeline-shaped. Your data leaves your perimeter.Precio institucional. Pensado como terminal, no como pipeline. Tus datos salen de tu perímetro. ~$24k/yr
Free news APIsAPIs gratuitas No NLP, no data contract, no schema guarantees. Silent shape changes break you in production.Sin NLP, sin contrato de datos, sin garantías de esquema. Cambios silenciosos de forma te rompen en producción. $0 + riskriesgo
Build it yourselfConstruirlo tú mismo Anti-bot blocking, GPU inference, orchestration, migrations, backfills. A permanent second product to maintain.Bloqueo anti-bot, inferencia en GPU, orquestación, migraciones, backfills. Un segundo producto permanente que mantener. Eng. monthsMeses-ing.
Syndra Processed, structured, contract-guaranteed financial intelligence over REST, deployed inside your own infrastructure.Inteligencia financiera procesada, estructurada y garantizada por contrato sobre REST, desplegada dentro de tu propia infraestructura. A fractionUna fracción

02 / How it worksCómo funciona

A medallion pipeline: Bronze, Silver, Gold. Un pipeline medallion: Bronze, Silver, Gold.

Each stage has one job and one contract with the next. Failures are isolated, states are explicit, and no article reaches the API until it has passed validation and enrichment. Cada etapa tiene una única responsabilidad y un contrato con la siguiente. Los fallos están aislados, los estados son explícitos y ningún artículo llega a la API sin pasar validación y enriquecimiento.

BRONZESILVERGOLD Ingest ScrapyPrefect flowsraw_articles Validate Pydantic v2data profilingfail-fast Enrich FinBERT · CUDAticker extractionP(pos) − P(neg) Index QdrantMiniLM-L6-v2CPU-isolated Serve FastAPIRedis cache/api/v1 PostgreSQL 16 · JSONB + GIN indexes Docker Compose · one command deploy Alembic migrations · idempotent loads

03 / The payloadEl payload

Read the response before you read the pitch. Lee la respuesta antes de leer el discurso.

GET/api/v1/sentiment/{ticker}
$ curl -s https://syndra.internal/api/v1/sentiment/AAPL?window=24h \
  -H "X-API-Key: $SYNDRA_KEY"
{
  "ticker": "AAPL",
  // label, never colour alone
  "sentiment_label": "positive",
  "sentiment_score": 0.6142,
  "article_count": 37,
  "time_window": "24h",
  "recent_signals": [
    {
      "title": "Apple expands silicon roadmap",
      "source": "global_finance_rss",
      "published_at": "2026-08-05T07:12:00Z",
      "score": 0.8431
    }
  ]
}
GET/api/v1/search/semantic
$ curl -s "…/search/semantic\
     ?q=supply+chain+risk"

[{
  "article_id": 41288,
  "similarity": 0.7913,
  "tickers": ["TSM", "NVDA"]
}]

Contract guaranteesGarantías del contrato

  • Egress DTOs are separate from internal ORM models, so refactors never change your schema.Los DTO de egreso están separados de los modelos ORM internos, así que un refactor nunca cambia tu esquema.
  • Versioned path (/api/v1). Breaking changes get a new version, not a new field type.Ruta versionada (/api/v1). Los cambios rompedores generan una versión nueva, no un tipo nuevo.
  • Hard limit ceiling of 100 signals per request, enforced by Pydantic.Techo estricto de limit a 100 señales por petición, forzado por Pydantic.
  • Continuous score, not three buckets. A mildly pessimistic neutral reads −0.0664.Score continuo, no tres cubos. Un neutral algo pesimista da −0,0664.

Sentiment encodingCodificación del sentimiento

negative neutral positive

Diverging blue↔red with a gray midpoint, never red/green, and the label always travels with the colour. Escala divergente azul↔rojo con punto medio gris, nunca rojo/verde, y la etiqueta siempre viaja con el color.

04 / Self-hostedAutoalojado

Your data never leaves your perimeter. Tus datos nunca salen de tu perímetro.

Syndra ships as Docker Compose and runs in your VPC or on-prem. Ingestion, inference and storage all execute on your hardware. There is no Syndra-operated cloud to trust, no vendor egress to audit, and no third-party model API in the path. Syndra se distribuye como Docker Compose y se ejecuta en tu VPC o en on-prem. La ingesta, la inferencia y el almacenamiento corren en tu hardware. No hay una nube operada por Syndra en la que confiar, ni egreso de proveedor que auditar, ni API de modelos de terceros en la ruta.

$ git clone && cp .env.example .env
$ make up   # postgres · qdrant · redis · api · prefect

Data residencyResidencia del dato

The dataset lives in your PostgreSQL, in your region, under your retention policy.El dataset vive en tu PostgreSQL, en tu región, bajo tu política de retención.

No third-party transitSin tránsito por terceros

Models are local weights, FinBERT and all-MiniLM-L6-v2, cached on disk and never called over the wire.Los modelos son pesos locales, FinBERT y all-MiniLM-L6-v2, en caché en disco y nunca llamados por red.

Procurement-friendlyApto para compras

One deployment boundary to review. No sub-processor chain, no DPA archaeology.Un único límite de despliegue que revisar. Sin cadena de subencargados ni arqueología de DPA.

05 / BYOS

Bring your own source.Trae tu propia fuente.

You declare the feeds in feeds.json and the engine ingests them. Syndra sells the pipeline, not somebody else's scraped archive, so licensing stays between you and the publishers you already have rights to. Tú declaras los feeds en feeds.json y el motor los ingiere. Syndra vende el pipeline, no el archivo scrapeado de otro, así que la licencia queda entre ti y los publishers sobre los que ya tienes derechos.

An architectural capability, configured per deployment. You decide which feeds the engine reads. Una capacidad arquitectónica, configurada por despliegue. Tú decides qué feeds lee el motor.

feeds.json
[
  {
    "name": "global_finance_rss",
    "url": "https://…/rss",
    "schedule": "*/30 * * * *",
    "parser": "rss.generic"
  }
]

06 / FAQ

Questions engineers ask first.Lo que pregunta primero un ingeniero.

Is this a trading signal?¿Es una señal de trading?

No. Public news is priced in almost instantly, so we make no claim of alpha. Syndra is structured input for your own research and risk models, not a recommendation engine.No. Las noticias públicas se descuentan casi al instante, así que no reclamamos alfa. Syndra es input estructurado para tus propios modelos de research y riesgo, no un motor de recomendaciones.

Which models run, exactly?¿Qué modelos se ejecutan exactamente?

FinBERT for sentiment, on GPU via CUDA when available, in an isolated subprocess. all-MiniLM-L6-v2 for embeddings, pinned to CPU so it cannot contend for VRAM. Both are local weights.FinBERT para sentimiento, en GPU vía CUDA cuando está disponible, en un subproceso aislado. all-MiniLM-L6-v2 para embeddings, fijado a CPU para que no compita por VRAM. Ambos son pesos locales.

What hardware does it need?¿Qué hardware necesita?

It runs CPU-only. A CUDA GPU is optional and materially faster for enrichment batches; inference is chunked iteratively so batch size never dictates the memory ceiling.Funciona solo con CPU. Una GPU CUDA es opcional y acelera notablemente los lotes de enriquecimiento; la inferencia se trocea de forma iterativa para que el tamaño de lote no dicte el techo de memoria.

How is the score computed?¿Cómo se calcula el score?

Net impact: P(positive) − P(negative) over the full class distribution, so a nominally neutral article still carries its directional bias instead of collapsing to zero.Impacto neto: P(positivo) − P(negativo) sobre toda la distribución de clases, de modo que un artículo nominalmente neutral conserva su sesgo direccional en lugar de colapsar a cero.

How do I authenticate?¿Cómo me autentico?

A static API key in the X-API-Key header, issued per deployment. Since the instance is yours, key rotation and rate limits are yours to set too.Una API key estática en la cabecera X-API-Key, emitida por despliegue. Como la instancia es tuya, la rotación de claves y los límites de tasa también los defines tú.

07 / AccessAcceso

Request access.Solicita acceso.

Onboarding is manual and deliberate: a short call about your feeds and infrastructure, then a deployment. No self-serve billing, no tiers to compare. El onboarding es manual y deliberado: una llamada corta sobre tus feeds e infraestructura y después un despliegue. Sin facturación self-serve ni planes que comparar.

Prefer email? ¿Prefieres email? syndradata@gmail.com