Snelstart
Vraag een sleutel aan, kopieer de regel, voer hem uit, lees de JSON.
0. Haal een sleutel op
Maak een gratis account, open API-sleutels en maak er een aan. Bewaar deze vervolgens in een omgevingsvariabele:
export FNA_KEY=fna_live_...1. Zoeken
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=climate+summit&size=2"{
"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"
}
]
}Drie velden in die response zijn direct de moeite waard om te bekijken. total is het aantal artikelen dat overeenkwam, niet het aantal dat is teruggegeven — dit is voor snelheid beperkt tot 10,000, en total_is_lower_bound geeft aan wanneer je deze limiet bereikt. country_source geeft aan hoe het land is bepaald, wat relevant is omdat ongeveer een derde van de landwaarden in elke nieuwsdataset inferenties zijn in plaats van feiten. En crawled_at is de eerlijke tijdstempel: uitgevers kunnen published_at een valse datum geven, maar de crawltijd wordt toegekend door de pipeline.
2. Verfijn het
Filters combineren met AND over parameters heen en OR binnen één parameter. Dus country=DE,AT&lang=de leest als "Duitstalige artikelen uit Duitsland of Oostenrijk". Dit vraagt om vandaag's Oekraïense artikelen uit Oekraïne, nieuwste eerst:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?country=UA&lang=uk&date=today&sort=date&size=10"3. Haal de volledige tekst op
Zoekresultaten bevatten standaard geen volledige tekst om de respons klein te houden. Vraag er expliciet om nadat je de artikelen hebt geselecteerd die je echt wilt:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=inflation&full_text=true&size=5"De volledige tekst is ongeveer 2,000–4,000 tekens per artikel. Twintig artikelen met full_text=true zijn ongeveer 40,000 tokens voor een taalmodel. Selecteer eerst, haal daarna de volledige teksten op. Zie tokenkosten.
4. Tel in plaats van opsommen
Vaak is de nuttige vraag niet "wat zijn de artikelen" maar "is er hier überhaupt iets, en waar is het". Het tellen van antwoorden kost een fractie van de kosten — ongeveer 200 tokens tegen enkele duizenden voor een pagina met resultaten — wat het de juiste eerste aanroep maakt voor een agent die beslist of een zoekopdracht de moeite waard is:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"De response geeft je aantallen per land, taal, domeinextensie, uitgever en dag, berekend over de volledige set van overeenkomende artikelen, niet alleen over de huidige pagina.
In 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"])In 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));