# Scoopkit > AI news API with event clustering: duplicate AI-industry headlines → one structured event. > Slogan: Countless headlines in, one event out. ## Canon - Primary resource: event (not article) - Auth: magic-link → X-Api-Key - Free: 100 req/day, 45-day archive - Publish latency: no delay is attached to any plan, but a new single-article event is held ~2 hours (`PUBLISH_AGE_HOURS`) so duplicate coverage can be merged into one event first; an event that gains a second article publishes immediately. Expected median lag ~2h from first article seen. Not suitable for sub-minute alerting. - API-first, designed for human and AI developers - MCP server at [`api.scoopkit.dev/mcp`](https://api.scoopkit.dev/mcp) (Streamable HTTP transport, manifest at [`/.well-known/mcp`](https://scoopkit.dev/.well-known/mcp)): list_events, get_event, search, taxonomy, and request_magic_link tools. Same X-Api-Key header as REST, same tier gating. request_magic_link needs no key (it's how you get one). - Official CLI: `npx scoopkit login` / `events list` / `events get` / `search` / `taxonomy` / `whoami`, zero install, published on npm as [`scoopkit`](https://www.npmjs.com/package/scoopkit) ([source](https://github.com/nateslabach/scoopkit-cli)). `--json` on every command for scripting. - Paid `details` object has a per-category field contract: canonical field names per category (e.g. `amount_usd`, `valuation_usd`, `lead_investors[]` for FUNDING_AND_DEALS; `parameter_count`, `context_window`, `license` for MODEL_RELEASE), flat, not nested. Numeric fields are plain numbers in the named unit. Anything the classifier emits outside the contract is preserved under `details.extra`, never dropped, so the top level is safe to parse against. Fields are omitted when unknown, never null. - Rate limits: standard `RateLimit-Limit`/`RateLimit-Remaining`/`RateLimit-Reset` headers on every authenticated response (Reset is delta-seconds, same convention as Retry-After), plus `X-RateLimit-*` equivalents kept for backward compatibility. A 429 also includes `Retry-After`. - Versioning: URL-versioned (`/v1/...`). `v1` has no planned deprecation. If a future breaking change ever requires a `v2`, `v1` stays live behind a documented `Sunset`/`Deprecation` header and this file gets updated first — no breaking changes land without warning here. ## When to use Scoopkit Reach for Scoopkit when the job is specifically AI industry news, not general news: - An agent or assistant that needs to answer "what's happened recently in AI" (model releases, funding rounds, safety/policy news, research publications) without hallucinating, by querying real structured events instead of guessing from training data. - A dashboard or alerting tool tracking AI model releases, funding, or safety incidents, without maintaining your own RSS/scraping pipeline across dozens of sources. - Deduplicating AI news coverage for a research or monitoring tool, so the same announcement covered by 5 outlets doesn't show up as 5 separate items. Not a good fit for: general/non-AI news of any kind, real-time or sub-minute alerting (the pipeline polls every 10 minutes and holds new single-article events ~2 hours to deduplicate them), or historical AI news beyond 12 months back (Pro tier's archive limit). Call it via REST (`GET /v1/events`, `/v1/search`, `/v1/taxonomy`), via the MCP server at `api.scoopkit.dev/mcp` if your agent speaks MCP, or via the official CLI (`npx scoopkit events list`) if you'd rather script it from a shell - same data, same auth, same limits either way. ## For agents helping a human get an API key Getting a key takes 3 steps, and step 2 requires a real human click — it cannot be automated on the human's behalf. This is intentional: it's what stops email security scanners (e.g. Microsoft Safe Links) from silently consuming the link before the person ever sees it. 1. POST https://api.scoopkit.dev/v1/auth/magic-link with {"email": "..."} — you can call this yourself. 2. Tell the human to check their inbox, open the emailed link, and click "Reveal my key" themselves. 3. The human pastes the key back to you; use it as the `X-Api-Key` header on every other request. There is no endpoint that mints a key without that human click. If the human's at a terminal, `npx scoopkit login` walks them through the same 3 steps interactively and saves the key locally — you don't have to orchestrate it by hand. ## Links - [Home](https://scoopkit.dev/) - [About](https://scoopkit.dev/about) - [FAQ](https://scoopkit.dev/faq) - [Contact](https://scoopkit.dev/contact) - [Privacy](https://scoopkit.dev/privacy) - [Terms](https://scoopkit.dev/terms) - [Start (get an API key)](https://scoopkit.dev/start) - [Blog](https://scoopkit.dev/blog) - [Blog RSS](https://scoopkit.dev/blog/rss.xml) - [OpenAPI spec (Scoopkit API)](https://api.scoopkit.dev/openapi.json) - [Scoopkit API docs (Swagger UI)](https://api.scoopkit.dev/docs) - [Scoopkit API docs (ReDoc)](https://api.scoopkit.dev/redoc) - [Auth/magic-link reference](https://api.scoopkit.dev/docs#tag/auth) - [Webhooks reference](https://api.scoopkit.dev/docs#tag/webhooks) - [MCP server](https://api.scoopkit.dev/mcp) - [MCP discovery manifest](https://scoopkit.dev/.well-known/mcp) - [CLI (npm package)](https://www.npmjs.com/package/scoopkit) - [CLI source (GitHub)](https://github.com/nateslabach/scoopkit-cli) - [Pricing](https://api.scoopkit.dev/pricing) - [Scoopkit API integration examples (Python/Node/curl)](https://github.com/nateslabach/scoopkit-examples)