kagi news
Read Kagi News from the public JSON endpoints. This command requires no authentication and provides access to Kagi's curated news feed.

Synopsis
kagi news [OPTIONS]Description
The kagi news command fetches the latest news from Kagi's public news endpoints. Unlike search commands, this requires no authentication and can be used immediately after installation.
Kagi News provides a curated selection of important stories across various categories, updated throughout the day. You can also apply local content filters with built-in presets or custom keywords before the CLI emits JSON.
Authentication
Required: None
This command works without any tokens, making it ideal for:
- Testing your installation
- Daily news briefings
- Public information gathering
- Unauthenticated environments
Options
--category <CATEGORY>
News category to fetch.
Default: world
Available Categories: use kagi news --list-categories to inspect the live category inventory. The available set changes over time and may include both core and community categories.
Example:
kagi news --category tech
kagi news --category business --limit 5--limit <COUNT>
Number of stories to return.
Type: Integer Default: 12 Constraint: must be greater than 0
Example:
kagi news --limit 5
kagi news --category tech --limit 10--lang <LANG>
Language for news content.
Default: default (uses Kagi's default)
Values: Language codes as supported
Example:
kagi news --lang en--list-categories
List available news categories instead of fetching news.
Example:
kagi news --list-categoriesOutput shows available categories and their descriptions.
--chaos
Get the current Kagi News chaos index.
The chaos index measures the level of disruption and uncertainty in current news cycles.
Example:
kagi news --chaos--list-filter-presets
List built-in content-filter presets instead of fetching stories.
Example:
kagi news --list-filter-presets
kagi news --list-filter-presets --lang en | jq '.presets[].id'--filter-preset <PRESET_ID>
Apply a built-in content-filter preset. Repeat the flag to combine multiple presets.
Use kagi news --list-filter-presets to inspect available ids.
Example:
kagi news --filter-preset politics
kagi news --filter-preset politics --filter-preset conflicts--filter-keyword <KEYWORD>
Apply a custom filter keyword. Repeat the flag to combine multiple keywords.
Example:
kagi news --filter-keyword trump
kagi news --filter-keyword trump --filter-keyword election--filter-mode <MODE>
How to handle matching stories.
Default: hide
Values: hide, blur
hideremoves matching stories from.storiesblurkeeps matching stories in.storiesand tags them with_content_filter
Example:
kagi news --filter-preset politics --filter-mode blur--filter-scope <SCOPE>
Which story fields to inspect for keyword matches.
Default: all
Values: title, summary, all
titlechecks title and categorysummarychecksshort_summaryallalso checks perspectives, source names, story domains, and article links/domains
Example:
kagi news --filter-keyword trump --filter-scope titleOutput Format
News Response
{
"latest_batch": {
"id": "batch-123",
"created_at": "2026-03-16T00:00:00Z"
},
"category": {
"category_id": "tech",
"category_name": "Technology"
},
"stories": [],
"total_stories": 20,
"domains": [],
"read_count": 1234,
"content_filter": {
"mode": "blur",
"scope": "all",
"active_presets": ["politics"],
"custom_keywords": ["trump"],
"active_keywords": ["trump", "election"],
"filtered_count": 1
}
}Fields
| Field | Type | Description |
|---|---|---|
latest_batch | object | Metadata for the current news batch |
category | object | Resolved category metadata |
stories | array | Raw story payloads returned by Kagi News |
total_stories | integer | Total number of stories in the category |
domains | array | Domain-level metadata from the feed |
read_count | integer | Aggregate read count for the category |
content_filter | object | Present when local content filters are active |
Filter Preset Response
{
"language": "en",
"presets": [
{
"id": "politics",
"label": "Politics",
"keywords": ["trump", "biden", "election"]
}
]
}Examples
Basic Usage
# Get world news (default)
kagi news
# Get tech news
kagi news --category tech
# Get 5 business stories
kagi news --category business --limit 5Content Filtering
# Hide stories that match the built-in politics preset
kagi news --filter-preset politics
# Keep matching stories, but tag them for downstream tooling
kagi news --filter-preset politics --filter-mode blur
# Filter with custom keywords only
kagi news --filter-keyword trump --filter-keyword election
# Limit matching to title/category checks
kagi news --filter-keyword trump --filter-scope titleProcessing Output
# Inspect the story payloads
kagi news | jq '.stories'
# Read category metadata
kagi news | jq '.category'
# Read the latest batch metadata
kagi news | jq '.latest_batch'
# Save to file
kagi news --category tech > tech-news.json
# Inspect active content-filter metadata
kagi news --filter-preset politics | jq '.content_filter'
# See which stories were tagged in blur mode
kagi news --filter-preset politics --filter-mode blur \
| jq '.stories[] | select(._content_filter != null) | {title, _content_filter}'Daily Briefing
#!/bin/bash
# Daily news briefing script
echo "📰 Today's News"
echo "==============="
for category in tech business science; do
echo ""
echo "${category^^}:"
kagi news --category "$category" --limit 3 | jq '.stories'
doneChaos Index
# Check current news chaos level
kagi news --chaosExit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Error (network, parsing, etc.) |
Troubleshooting
Empty results
- Try different category
- Check whether local content filters removed every story
- Check network connectivity
- Verify Kagi endpoints are accessible
"Failed to fetch"
- Check internet connection
- Verify DNS resolution:
nslookup kagi.com - Try with curl:
curl https://kagi.com