Quickstart
A key, a first request, and a first tool call.
1. Get a key
Sign in at console.unzoi.com and create a key. Signing up and signing in are the same magic-link action, and the free tier needs no card.
Keys look like nai_ followed by 48 hex characters. The console shows a key once, at creation — only its
hash is stored, so a lost key is rotated rather than recovered.
2. Your first request
curl -s "https://api.unzoi.com/search?q=semiconductor+export+controls&limit=3" \
-H "x-api-key: $UNZOI_KEY" What comes back:
{
"total": 41,
"total_relation": "exact",
"offset": 0,
"limit": 3,
"has_more": true,
"mode": "keyword",
"partial": false,
"coverage": "complete",
"results": [
{
"id": "20260826073000-a1b2c3",
"title": "New export controls tighten chip supply",
"url": "https://example.com/chips",
"source": "reuters.com",
"language": "eng",
"published_at": "20260826073000",
"story_id": "s-9f2c",
"topics": ["ECON_TRADE", "TECH_SEMICONDUCTOR"],
"organizations": ["asml"],
"countries": ["NL", "CN"]
}
],
"history_days": 30,
"from_clamped": false,
"attribution": "Data derived from the GDELT Project (https://www.gdeltproject.org/)."
}
Four fields there are about the answer rather than about the news. history_days is how far back your
plan may query, and from_clamped says whether this request hit that boundary —
Archive depth explains both. partial and coverage
say whether the whole index was read; when they are anything but false and complete, a
short list is not the answer — Reading completeness.
3. Collapse the duplicates
That search returned 41 articles, but not 41 events — a wire story runs across many outlets. Ask for stories instead:
curl -s "https://api.unzoi.com/stories?q=semiconductor+export+controls&limit=3" \
-H "x-api-key: $UNZOI_KEY" {
"total": 6,
"partial": false,
"coverage": "complete",
"stories": [
{
"story_id": "s-9f2c",
"count": 23,
"outlets": 19,
"title": "New export controls tighten chip supply",
"url": "https://example.com/chips",
"sources": ["reuters.com", "bbc.co.uk", "ft.com"]
}
]
}
Six events rather than 41 articles, each carrying how many outlets ran it. Fetch
/stories/{story_id} to expand one into the whole event — every outlet, when it was first
and last seen, what it is about, its newest articles:
curl -s "https://api.unzoi.com/stories/s-9f2c?limit=5" -H "x-api-key: $UNZOI_KEY" 4. Connect an agent
The same index is an MCP server at https://api.unzoi.com/mcp. In Claude Code, one command:
claude mcp add --transport http unzoi https://api.unzoi.com/mcp \
--header "x-api-key: $UNZOI_KEY" Then ask something that needs current reporting, and watch the tool call in the transcript.
For every other client — Claude Desktop, ChatGPT, Cursor, Windsurf, VS Code, Zed, Cline, Continue, Goose, LangChain, LlamaIndex, n8n, Bedrock AgentCore — see Agent clients. Each page carries the config for that client and the mistake people actually make with it.
5. Know your budget
curl -s https://api.unzoi.com/account -H "x-api-key: $UNZOI_KEY"
Plan, credits a minute, the monthly credit allocation and how much of it is used, whether the key stops at its
allocation or bills overage, and the archive depth — free to ask. Every response also carries the same figures as
headers, and says what it cost in x-credits-charged. To price a call before running it, add
estimate=true; nothing runs and nothing is charged.
Credits and overage has what each call costs.
Where next
- The search endpoint — every parameter, generated from the spec.
- Choosing a ranking mode — when to use hybrid, and when not to.
- TypeScript and Python — working clients in ~40 lines.
- The MCP tool reference — all 18 tools and every argument.
- Reading completeness — the three fields to check before saying "nobody covered this".