From 1 November 2026 the API needs a free key. Calls without one work until then. Get a key · what changes
ES
EnglishУкраїнськаEspañolPortuguêsDeutschFrançaisItalianoPolskiNederlandsSvenskaDanskNorskSuomiČeštinaRomânăMagyarΕλληνικάTürkçeالعربيةעבריתفارسیहिन्दीবাংলাIndonesiaMelayuTiếng Việtไทย日本語한국어中文
Iniciar sesiónObtén la clave de la API
Inicio › Documentación de la API › Inicio rápido

Inicio rápido

Obtén una clave, copia la línea, ejecútala, lee el JSON.

0. Obtén una clave

Crea una cuenta gratuita, abre las claves API y genera una. Luego, guárdala en una variable de entorno:

bash
export FNA_KEY=fna_live_...

1. Buscar

bash
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=climate+summit&size=2"
respuesta
{
  "took_ms": 41,
  "total": 1284,
  "total_is_lower_bound": false,
  "size": 2,
  "offset": 0,
  "results": [
    {
      "id": "9c1f8a4b2d3e5f6071829304a5b6c7d8",
      "url": "https://example-news.com/world/climate-summit-opens",
      "title": "Climate summit opens with a call for binding targets",
      "description": "Delegates from 190 countries gathered on Monday ...",
      "published_at": "2026-08-17T09:12:00Z",
      "crawled_at": "2026-08-17T10:48:31Z",
      "host": "example-news.com",
      "sitename": "Example News",
      "country": "GB",
      "country_source": "cctld",
      "lang": "en",
      "tld": "com"
    }
  ]
}

Tres campos en esa respuesta merecen atención inmediata. total indica cuántos artículos coincidieron, no cuántos se devolvieron: está limitado a 10,000 por velocidad, y total_is_lower_bound te avisa cuando alcanzas ese límite. country_source indica cómo se determinó el país, lo cual es importante porque aproximadamente un tercio de los valores de país en cualquier conjunto de noticias son inferencias y no hechos. Y crawled_at es la marca de tiempo honesta: los editores pueden posponer la fecha de published_at, pero el tiempo de rastreo lo asigna la tubería de procesamiento.

2. Refina la búsqueda

Los filtros se combinan con AND entre parámetros y OR dentro de uno. Así country=DE,AT&lang=de se lee como "artículos en alemán de Alemania o Austria". Esto solicita los artículos de hoy en ucraniano de Ucrania, más recientes primero:

bash
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?country=UA&lang=uk&date=today&sort=date&size=10"

3. Obtén el texto completo

Los resultados de la búsqueda omiten el cuerpo del artículo de forma predeterminada para mantener las respuestas ligeras. Solicítalo explícitamente cuando hayas seleccionado los artículos que realmente deseas:

bash
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=inflation&full_text=true&size=5"

El texto completo tiene aproximadamente 2,000–4,000 caracteres por artículo. Veinte artículos con full_text=true equivalen a aproximadamente 40,000 tokens para un modelo de lenguaje. Selecciona primero, luego obtén los cuerpos de los artículos. Consulta los costos de tokens.

4. Cuenta en lugar de listar

A menudo, la pregunta útil no es "cuáles son los artículos" sino "hay algo aquí, y dónde está". Contar respuestas por una fracción del costo — aproximadamente 200 tokens frente a varios miles para una página de resultados — lo que lo convierte en la primera llamada adecuada para un agente que decide si vale la pena ejecutar una búsqueda:

bash
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"

La respuesta te proporciona conteos por país, idioma, zona de dominio, editor y día, calculados sobre todo el conjunto de coincidencias en lugar de solo la página actual.

En Python

python
import os, requests
HEADERS = {"Authorization": "Bearer " + os.environ["FNA_KEY"]}

r = requests.get("https://freenewsapi.ai/v1/search", headers=HEADERS, params={
    "q": "semiconductor export controls",
    "date": "7d",
    "lang": "en",
    "size": 20,
    "sort": "relevance",
})
for a in r.json()["results"]:
    print(a["published_at"], a["host"], a["title"])

En JavaScript

javascript
const url = new URL("https://freenewsapi.ai/v1/search");
url.search = new URLSearchParams({ q: "central bank", date: "24h", size: "20" });

const { results } = await (await fetch(url, { headers: { Authorization: `Bearer ${FNA_KEY}` } })).json();
results.forEach(a => console.log(a.published_at, a.host, a.title));

Siguiente