Snabbstart
Hämta en nyckel, kopiera raden, kör den, läs JSON.
0. Skaffa en nyckel
Skapa ett gratis konto, öppna API-nycklar och skapa en. Förvara den sedan i en miljövariabel:
export FNA_KEY=fna_live_...1. Sök
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"
}
]
}Tre fält i svaret är värda att notera direkt. total är antalet matchande artiklar, inte antalet returnerade – det är begränsat till 10,000 för hastighet, och total_is_lower_bound berättar när du når gränsen. country_source säger hur landet bestämdes, vilket är viktigt eftersom ungefär en tredjedel av landsvärdena i vilken nyhetsdataset som helst är inferenser snarare än fakta. Och crawled_at är den ärliga tidsstämpeln: utgivare kan datera tillbaka published_at, men crawltiden tilldelas av pipeline:n.
2. Begränsa sökningen
Filter kombineras med AND mellan parametrar och OR inom ett och samma. Så country=DE,AT&lang=de läses som "tyskspråkiga artiklar från Tyskland eller Österrike". Detta frågar efter dagens ukrainskspråkiga artiklar från Ukraina, nyast först:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?country=UA&lang=uk&date=today&sort=date&size=10"3. Hämta hela texten
Sökresultaten innehåller inte artikeltexten som standard för att hålla svaren små. Be om den explicit när du har valt de artiklar du faktiskt vill ha:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=inflation&full_text=true&size=5"Fulltexten är ungefär 2,000–4,000 tecken per artikel. Tjugo artiklar med full_text=true motsvarar cirka 40,000 tokens för en språkmodell. Välj först, hämta sedan texterna. Se tokenkostnader.
4. Räkna istället för att lista
Den användbara frågan är ofta inte "vad är artiklarna" utan "finns det något här alls, och var är det". Att räkna svar till en bråkdel av kostnaden – cirka 200 tokens mot flera tusen för en sida med resultat – vilket gör det till det första anropet för en agent som avgör om en sökning är värd att köra:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"Svaret ger dig antal per land, språk, domäntyp, nyhetsutgivare och dag, beräknat över hela matchande mängden snarare än den aktuella sidan.
I 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"])I 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));