USDT/BOB*
10.74 -1.91%
USDT/PEN*
3.38 +0.07%
BTC/USD*
75.874 -2.19%
ETH/USD*
2.404 -3.69%
Para Desarrolladores

SC Tech News API — Guías

Accede a noticias de Bolivia desde 12 fuentes con metadata de sesgo editorial, indicadores de mercado y más.

Quick Start

1

Obtén tu API Key (abajo en esta página)

2

Haz tu primer request:

curl -H "Authorization: Bearer tu_key" \
  https://bolivia-news-production.up.railway.app/api/v1/articles?limit=5
3

O prueba sin auth: /api/v1/headlines y /api/v1/market

4

¿Usas Claude Code u otro agente? Conéctalo como servidor MCP.

API Key

Servidor MCP

MCP

Conecta Claude Code u otro cliente MCP y tu agente podrá buscar noticias, leer artículos y consultar los mercados con herramientas, sin escribir peticiones a mano. Usa la misma API key y el mismo límite: 60 peticiones por minuto.

URL
https://bolivia-news-production.up.railway.app/api/v1/mcp
Transporte
Streamable HTTP (JSON-RPC 2.0)
Autenticación
Authorization: Bearer tu_key

Claude Code

Revela la API key y este comando saldrá ya con tu clave.

terminal
claude mcp add --transport http sctech https://bolivia-news-production.up.railway.app/api/v1/mcp --header "Authorization: Bearer tu_key"

Compartido en el repositorio (.mcp.json)

Para que todo el equipo tenga el servidor. La clave no va en el fichero: exporta SCTECH_API_KEY y Claude Code sustituye ${SCTECH_API_KEY} al arrancar.

.mcp.json
{
  "mcpServers": {
    "sctech": {
      "type": "http",
      "url": "https://bolivia-news-production.up.railway.app/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${SCTECH_API_KEY}"
      }
    }
  }
}

Herramientas (5)

  • buscar_noticias Buscar noticias

    Busca noticias de Bolivia por texto libre sobre titular y extracto. El ámbito por defecto es el día de hoy; usa scope=week o scope=archive para ampliar. Devuelve titulares con fuente y fecha, no el contenido completo.

  • ultimos_titulares Últimos titulares

    Devuelve los titulares más recientes de los medios bolivianos, con su fuente. Sin contenido completo: para eso usa leer_articulo con el id.

  • leer_articulo Leer un artículo

    Devuelve un artículo completo por su id, con contenido, fuente y su ficha de sesgo editorial. Los ids salen de buscar_noticias o ultimos_titulares.

  • listar_fuentes Listar fuentes

    Devuelve los medios bolivianos que cubre el sistema, con sus metadatos de sesgo editorial, factualidad y propiedad. Útil para contextualizar de quién viene una noticia.

  • indicadores_mercado Indicadores de mercado

    Cotización del dólar paralelo en Bolivia (USDT/BOB) y otros indicadores, con su variación. Es el dato que más se consulta del sitio.

Endpoints

GET /api/v1/headlines public

Últimos titulares sin contenido completo.

limit int · por defecto 50
Máximo resultados (max 50)
curl https://bolivia-news-production.up.railway.app/api/v1/headlines?limit=5
GET /api/v1/search public

Búsqueda de texto completo sobre titulares y extractos. Acotada al día por defecto.

q string
Obligatorio. 2–120 caracteres. Admite "frase exacta", or y -excluir
scope string · por defecto day
day (hoy), week (7 días) o archive (todo)
limit int · por defecto 20
Máximo resultados (max 50)
offset int · por defecto 0
Desplazamiento (max 200)
curl "https://bolivia-news-production.up.railway.app/api/v1/search?q=comarapa+bloqueo&scope=day"
GET /api/v1/articles api key

Lista paginada de artículos con contenido completo.

q string
Texto libre sobre titular y extracto (mín. 2 caracteres)
limit int · por defecto 20
Máx resultados (max 50)
offset int · por defecto 0
Offset para paginación
source string
Filtrar por slug de fuente
category string
politica, economia, deportes, tecnologia
since ISO date
Artículos después de esta fecha
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://bolivia-news-production.up.railway.app/api/v1/articles?source=el-deber&limit=5"
GET /api/v1/articles/:id api key

Artículo individual con todo el contenido.

id int
ID del artículo (en URL path)
curl -H "Authorization: Bearer YOUR_KEY" \
  https://bolivia-news-production.up.railway.app/api/v1/articles/25006
GET /api/v1/sources api key

Fuentes de medios activas con metadata de sesgo editorial.

curl -H "Authorization: Bearer YOUR_KEY" https://bolivia-news-production.up.railway.app/api/v1/sources
GET /api/v1/market public

Indicadores de mercado: USDT/BOB, USDT/PEN, BTC/USD, ETH/USD.

curl https://bolivia-news-production.up.railway.app/api/v1/market
GET /api/health public

Estado del servicio y conectividad con la base de datos.

curl https://bolivia-news-production.up.railway.app/api/health
POST /api/v1/mcp api key

Servidor MCP (JSON-RPC 2.0). Para conectar un agente, mira la sección «Servidor MCP» más arriba.

curl -X POST https://bolivia-news-production.up.railway.app/api/v1/mcp -H "Authorization: Bearer tu_key" -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

SKILL.md para agentes

Descarga este archivo y agrégalo a .claude/skills/ de tu proyecto para que Claude Code pueda consultar noticias de Bolivia en tiempo real.

Descargar SKILL.md
sctech-news-api.md
---
name: sctech-news-api
description: "Fetch real-time Bolivia news, market data, and media source metadata from the SC Tech News public API. Use when the user asks about Bolivia news, current events, exchange rates (dolar blue), or needs to analyze Bolivian media coverage."
---

# SC Tech News API

Public API for Bolivia news articles from 12 media sources with bias metadata and market indicators.

**Base URL:** `https://bolivia-news-production.up.railway.app/api/v1`

## Authentication

Endpoints marked (public) require no auth. All others require a Bearer token:

```
Authorization: Bearer {{API_KEY}}
```

Get a key at https://bolivia-news-production.up.railway.app/guides

## MCP server (recommended)

There is an MCP server at `POST /api/v1/mcp`. Connecting it is usually better than
calling the endpoints by hand: the tools are self-describing and the responses come back
structured.

```
claude mcp add --transport http sctech \
  https://bolivia-news-production.up.railway.app/api/v1/mcp \
  --header "Authorization: Bearer {{API_KEY}}"
```

Or in the project's `.mcp.json`:

```json
{"mcpServers":{"sctech":{"type":"http","url":"https://bolivia-news-production.up.railway.app/api/v1/mcp","headers":{"Authorization":"Bearer {{API_KEY}}"}}}}
```

Tools: `buscar_noticias`, `ultimos_titulares`, `leer_articulo`, `listar_fuentes`,
`indicadores_mercado`.

It runs over the same API key and the same rate limits as the REST endpoints below.

## Endpoints

### GET /headlines (public)

Latest headlines without full content. No auth required.

```bash
curl https://bolivia-news-production.up.railway.app/api/v1/headlines?limit=10
```

Response:
```json
{
  "data": [
    {
      "id": 25006,
      "title": "Contraloría pide a Migración controlar salida de exautoridades",
      "source": { "name": "El Deber", "slug": "el-deber", "bias": "center" },
      "category": "Politica",
      "publishedAt": "2026-04-29T23:51:07.000Z"
    }
  ]
}
```

### GET /search (public)

Full-text search over headlines and excerpts, in Spanish.

Scoped to **today** by default. This is deliberate: a news search that sweeps the whole
archive on every keystroke is the cheapest way to exhaust the database. Widen it
explicitly with `scope` when today has nothing.

```bash
curl "https://bolivia-news-production.up.railway.app/api/v1/search?q=comarapa+bloqueo&scope=day&limit=10"
```

**Parameters:**

| Param | Type | Default | Description |
|-------|------|---------|-------------|
| `q` | string | — | **Required.** 2–120 chars. Supports `"exact phrase"`, `or`, and `-exclude` |
| `scope` | string | `day` | `day` (today, Bolivia time), `week` (last 7 days), `archive` (everything) |
| `limit` | int | 20 | Max results (max 50) |
| `offset` | int | 0 | Pagination offset (max 200) |

The query is parsed with Postgres `websearch_to_tsquery`, so malformed input never
errors — it just matches nothing.

Response:
```json
{
  "data": [
    {
      "id": 25006,
      "title": "Dan cuarto intermedio en el bloqueo de Comarapa",
      "excerpt": "Los transportistas acordaron...",
      "source": { "name": "El Deber", "slug": "el-deber", "bias": "center" },
      "category": "Politica",
      "publishedAt": "2026-09-10T14:20:00.000Z",
      "url": "https://eldeber.com.bo/...",
      "author": "Redacción",
      "curated": true
    }
  ],
  "meta": {
    "query": "comarapa bloqueo",
    "scope": "day",
    "total": 3,
    "totalIsCapped": false,
    "limit": 10,
    "offset": 0
  }
}
```

**Two things to know:**

- Results carry **no `content` field.** Search returns headlines; fetch the body with
  `GET /articles/:id` for the one you actually want. Returning 20 full article bodies
  per query is megabytes over the wire for data nobody reads.
- `totalIsCapped: true` means counting stopped at 500 — `total` is a floor, not an
  exact figure. An uncapped `count(*)` over the archive is the expensive half of a
  search, and it is not worth paying on a public endpoint.

### GET /articles (auth required)

Paginated articles with full content.

```bash
curl -H "Authorization: Bearer {{API_KEY}}" \
  "https://bolivia-news-production.up.railway.app/api/v1/articles?limit=10&source=el-deber&category=economia"
```

**Parameters:**

| Param | Type | Default | Description |
|-------|------|---------|-------------|
| `limit` | int | 20 | Max results (max 50) |
| `offset` | int | 0 | Pagination offset |
| `source` | string | — | Filter by source slug (e.g. `el-deber`, `la-razon`) |
| `category` | string | — | Filter by category: `politica`, `economia`, `deportes`, `tecnologia`, `seguridad`, `sociedad` |
| `since` | ISO date | — | Articles after this date (e.g. `2026-04-28`) |

Response:
```json
{
  "data": [
    {
      "id": 25006,
      "title": "Contraloría pide a Migración...",
      "content": "El texto completo del artículo...",
      "excerpt": "",
      "source": { "name": "El Deber", "slug": "el-deber", "bias": "center" },
      "category": "Politica",
      "publishedAt": "2026-04-29T23:51:07.000Z",
      "url": "https://eldeber.com.bo/...",
      "media": ["https://...image.jpg"],
      "author": "Redacción",
      "curated": false
    }
  ],
  "meta": { "total": 25071, "limit": 10, "offset": 0 }
}
```

### GET /articles/:id (auth required)

Single article by ID.

```bash
curl -H "Authorization: Bearer {{API_KEY}}" \
  https://bolivia-news-production.up.railway.app/api/v1/articles/25006
```

### GET /sources (auth required)

Active media sources with bias and factuality metadata.

```bash
curl -H "Authorization: Bearer {{API_KEY}}" \
  https://bolivia-news-production.up.railway.app/api/v1/sources
```

Response:
```json
{
  "data": [
    {
      "id": 1,
      "name": "El Deber",
      "slug": "el-deber",
      "url": "https://eldeber.com.bo",
      "bias": "center",
      "ownership": "private",
      "factuality": "high",
      "country": "Bolivia",
      "city": "Santa Cruz"
    }
  ]
}
```

### GET /market (public)

Current exchange rates and crypto prices.

```bash
curl https://bolivia-news-production.up.railway.app/api/v1/market
```

Response:
```json
{
  "data": [
    { "symbol": "USDT/BOB", "value": "9.54", "change": "+0.0000", "changePercent": "+0.00%", "isUp": true, "lastTime": "6:00 AM UTC" },
    { "symbol": "BTC/USD", "value": "77,867", "change": "+252.95", "changePercent": "+0.32%", "isUp": true, "lastTime": "2:00 PM UTC" }
  ]
}
```

## Rate Limits

| Tier | Limit | Applies to |
|------|-------|-----------|
| No auth | 10 req/min per IP | `/headlines`, `/market`, `/health` |
| With API key | 60 req/min | All endpoints |

Rate limit headers: `X-RateLimit-Limit`, `X-RateLimit-Remaining`

## Usage Tips

- Use `/headlines` for quick overviews (no auth needed)
- Use `?source=` to compare coverage from different media outlets
- The `bias` field (left/center/right) helps analyze media perspective
- The `curated` field indicates if the article was AI-processed (currently all `false` — raw scraped content)
- Articles are scraped every ~2 hours from 11 Bolivian media sources
- Market data updates on request (cached 60s server-side)

## Source Slugs

| Source | Slug | Bias |
|--------|------|------|
| La Razón | `la-razon` | center |
| El Deber | `el-deber` | center |
| Opinión | `opinion` | center |
| ANF | `anf-agencia-de-noticias-fides` | center |
| ABI | `abi-agencia-boliviana-de-informacion` | center |
| Ahora El Pueblo | `ahora-el-pueblo` | left |
| Bolivia TV | `bolivia-tv` | left |
| Erbol | `erbol` | center |
| Página Siete | `pagina-siete` | center |
| Los Tiempos | `los-tiempos` | center |
| Cambio | `cambio` | left |

Rate Limits

TierLímiteEndpoints
Sin auth10 req/min/api/v1/headlines, /api/v1/market, /api/v1/search
Con API key60 req/minTodos los endpoints

Los headers X-RateLimit-Limit y X-RateLimit-Remaining se incluyen en cada respuesta. Al exceder el límite recibes 429 con Retry-After.

Términos de Uso

  • 1. Atribución requerida — Menciona la fuente original del artículo (El Deber, La Razón, etc.) al mostrar contenido.
  • 2. No redistribuir contenido completo — Puedes usar excerpts y titulares libremente. El contenido completo es para análisis, no para republicar.
  • 3. Respetar rate limits — No hagas polling agresivo. Los datos se actualizan cada ~2 horas.

Para agentes IA

Conéctalo como servidor MCP o dale el SKILL.md para que Claude Code o cualquier agente consulte esta API.