Route News
curl --request GET \
--url https://app.airrating.io/api/newsimport requests
url = "https://app.airrating.io/api/news"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://app.airrating.io/api/news', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.airrating.io/api/news",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.airrating.io/api/news"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.airrating.io/api/news")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.airrating.io/api/news")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"origin": "<string>",
"dest": "<string>",
"news": [
{
"title": "<string>",
"summary": "<string>",
"source": "<string>",
"url": "<string>",
"published_at": "<string>",
"impact": "<string>",
"event_type": "<string>",
"severity": 123
}
],
"meta": {
"count": 123,
"cached": true,
"fetched_at": "<string>",
"cache_ttl_hours": 123
}
}API Reference
Route News
Get recent news and disruption reports for a route.
GET
/
api
/
news
Route News
curl --request GET \
--url https://app.airrating.io/api/newsimport requests
url = "https://app.airrating.io/api/news"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://app.airrating.io/api/news', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.airrating.io/api/news",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.airrating.io/api/news"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.airrating.io/api/news")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.airrating.io/api/news")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"origin": "<string>",
"dest": "<string>",
"news": [
{
"title": "<string>",
"summary": "<string>",
"source": "<string>",
"url": "<string>",
"published_at": "<string>",
"impact": "<string>",
"event_type": "<string>",
"severity": 123
}
],
"meta": {
"count": 123,
"cached": true,
"fetched_at": "<string>",
"cache_ttl_hours": 123
}
}Overview
Returns recent news articles, strike alerts, weather warnings, and disruption reports relevant to a given route. Powered by AI curation from Google News and ANSA — only items with meaningful impact on flight reliability are included. News is cached for 6 hours per route. Passrefresh=true to force a fresh fetch.
Request
string
required
IATA code of the departure airport.
string
required
IATA code of the arrival airport.
boolean
default:"false"
If
true, bypasses the cache and fetches fresh news. Use sparingly.string
required
Your API key.
Response
string
IATA code of the departure airport.
string
IATA code of the arrival airport.
array
List of news items relevant to the route.
Show News item
Show News item
string
Article or alert title.
string
AI-generated one-sentence summary of the disruption impact.
string
Source name (e.g.
AviationHerald, ANSA).string
Link to the original article.
string
ISO 8601 publication timestamp.
string
Estimated disruption impact:
low, medium, or high.string
Category:
strike, weather, atc, security, technical, or general.float
Numeric severity estimate 0.0–1.0.
object
Example
curl "https://app.airrating.io/api/news?origin=FCO&dest=LHR&api_key=YOUR_API_KEY"
import httpx
response = httpx.get(
"https://app.airrating.io/api/news",
params={"origin": "FCO", "dest": "LHR", "api_key": "YOUR_API_KEY"}
)
data = response.json()
for item in data["news"]:
print(f"[{item['impact'].upper()}] {item['title']}")
Response
{
"origin": "FCO",
"dest": "LHR",
"news": [
{
"title": "Heathrow ATC staffing issues expected this weekend",
"summary": "Air traffic control understaffing at Heathrow may cause ground delays of 30–60 minutes on Saturday.",
"source": "AviationHerald",
"url": "https://example.com/article",
"published_at": "2026-04-08T14:30:00Z",
"impact": "medium",
"event_type": "atc",
"severity": 0.55
}
],
"meta": {
"count": 1,
"cached": true,
"fetched_at": "2026-04-09T08:00:00Z",
"cache_ttl_hours": 6
}
}
You can include news inline in the
/api/score response by passing news=true. This avoids a second API call when you need both score and news context together.⌘I
