<!-- twin of https://specstream.ai/migrate/kagi -->
# Kagi Search API compatible: change the address, at $5 per 1,000

Compared on Nov 10, 2026. The page: https://specstream.ai/migrate/kagi

Kagi's Search API costs $12 per 1,000 requests. SpecStream answers Kagi's `POST /api/v1/search` in Kagi's own JSON for $5 per 1,000 searches of up to 10 results. Every line below was measured on production on November 10, 2026.

The switch is one address: `https://api.specstream.ai/kagi/api/v1` in place of `https://kagi.com/api/v1`, and a SpecStream key as the Bearer token. Your code reads `data.search[].url`, `title` and `snippet` as before.

SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. Page text through `extract` costs nothing extra.

[Get an API key](https://specstream.ai/signup?src=alternatives-migrate-kagi&utm_source=alternatives-md&utm_campaign=migrate-kagi&returnTo=%2Fworkspace%2Fsearch%3Froute%3Dkagi) New accounts get $10 of credit, no card. It covers 2,000 searches.

## Kagi Search API to SpecStream, parameter by parameter and field by field

| | SpecStream | Kagi Search API |
|---|---|---|
| Address | `POST https://api.specstream.ai/kagi/api/v1/search`, and the legacy v0 form at `https://api.specstream.ai/kagi/api/v0` | `POST https://kagi.com/api/v1/search`. The previous v0 API is documented as legacy |
| The key | A SpecStream key as `Authorization: Bearer`, or as `Bot` on the v0 form | A Kagi key as `Authorization: Bearer` |
| `workflow` | `search`, the default. Another workflow gets `400` with the reason | Web, images, news, videos and podcasts |
| `lens` and `filters` | `sites_included`, `sites_excluded`, `keywords_included`, `keywords_excluded`, `file_type`, `time_after`, `time_before`, `time_relative`, and `filters.after` and `before` | Lenses, country and language filters |
| Page text | `extract.count` 1 to 10 puts each of the first results' page text in its `snippet`, at no extra cost | Extra snippets with full page content alongside the results. Extract is a separate API at $4 per 1,000 pages, up to 10 URLs a request |
| Paging | `limit` returns up to 100 results, 10 when you send none, and `page` 1 to 10 | The same `limit` and `page` fields |
| The reply | `meta.trace` and `meta.ms`, and `data.search[]` with `url`, `title`, `snippet` and `time` when the page has a date. Not returned: `image`, `props`, `related_search`, `direct_answer` and `infobox` | `meta` and `data.search[]`, with related searches, direct answers and infoboxes |
| Errors | Kagi's `{"meta", "data": null, "errors": [{"code", "message"}]}`. A busy call answers `429` with `Retry-After` and charges nothing | `errors[]` with a code and a message |
| Price per 1,000 searches | $5 for up to 10 results, page text included. 20 results cost $0.011 a call | $12 per 1,000 requests, pay only for what you use. Volume discounts by quote |
| Paying | Prepaid credit that never expires. $10 of credit, no card, covers 2,000 searches | Invoiced every 30 days, or as soon as usage reaches $100 |

## The Kagi Search API reference, on SpecStream

### The call, before and after

```
# Before
curl -X POST https://kagi.com/api/v1/search \
  -H "Authorization: Bearer $KAGI_API_KEY" -H "Content-Type: application/json" \
  -d '{"query": "Who founded Mistral AI and when?"}'

# After
curl -X POST https://api.specstream.ai/kagi/api/v1/search \
  -H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"query": "Who founded Mistral AI and when?"}'
```

In Kagi's generated Python client the change is the host, and in `kagiapi` 0.2.1, on the v0 form, the base address:

```
openapi_client.Configuration(host="https://api.specstream.ai/kagi/api/v1", access_token=SPECSTREAM_API_KEY)
KagiClient.BASE_URL = "https://api.specstream.ai/kagi/api/v0"   # kagiapi, v0
```

Every parameter and field on this page is in the [pass table](https://specstream.ai/specstream/dialects/kagi.md), measured on production on November 10, 2026.

### Apps and SDKs that take the address as a setting

Each line was run on production on November 10, 2026 through that client's own request and reply code. Put your SpecStream key wherever the client takes its key.

`kagiapi` 0.2.1, Kagi's v0 Python client: set `KagiClient.BASE_URL = "https://api.specstream.ai/kagi/api/v0"`.

### Every parameter the route uses

Used in the search: `query`, `limit` (up to 100 results returned), `page` (1 to 10), the `lens` fields `sites_included`, `sites_excluded`, `keywords_included`, `keywords_excluded`, `file_type`, `time_after`, `time_before` and `time_relative` (`day`, `week`, `month`), `filters.after` and `filters.before`, and `personalizations.domains` with `kind` `block`.

Used to shape the reply: `extract.count` (1 to 10) puts the page text of that many of the first results in their `snippet`. On the v0 form, `q` and `limit`.

Refused with Kagi's error body: a `workflow` other than `search` gets `400`.

### Every field that comes back

The reply has `meta` with `trace` and `ms`, and `data.search`. Each result has `url`, `title`, `snippet`, and `time` when the page has a date. Not returned: `meta.node`, `image`, `props`, `related_search`, `direct_answer` and `infobox`.

The v0 form returns `meta.id` and `ms`, and `data[]` with `t`, `url`, `title`, `snippet` and `published`. It does not return `api_balance`, `thumbnail` or related searches.

One field is added: `specstream`, with what the Search API returns beyond Kagi's fields, including the call's `price_usd`. A parser that reads Kagi's fields never sees it.

### $5 per 1,000 searches, where Kagi charges $12

Kagi charges $12 per 1,000 search requests. On SpecStream a call of up to 10 results costs $0.005, with or without `extract`, and each started block of 10 more results adds $0.006: 20 results cost $0.011. A call stopped by a `429` charges nothing, and credit you buy never expires.

### The most accurate web search API, in about one second

On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate-kagi) page.

A call with no `extract` runs the fast search. Measured on production on November 9, 2026, its median was 0.82 s at 1 search a second and 1.07 s at 20 a second, the 95th percentile stayed between 1.09 and 1.73 s, and it answered 718 of 720. It takes up to 8,800 searches a minute on one account. A call with `extract` runs the default search, which reads the pages, at the same price.

### You decide what is kept, on each key

Create the key with `zero_retention` and a search made with it keeps no request text and no answer after the reply: it is not in the history, its answer is not reused for another call, and its log lines carry neither. `spend_cap_cents` is the most the key can spend.

```
curl -X POST https://api.specstream.ai/v1/account/keys \
  -H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'
```

### Search, pages and rows on one key

The same key reads up to 20 pages or documents a call with the [Extract API](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=migrate-kagi) at $0.80 per 1,000 pages, and a page with no text is not charged. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=migrate-kagi) returns every match for a request in plain words as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value. The most a run can cost is approved before it starts. The full comparison is on the [Kagi Search API alternative](https://specstream.ai/alternatives/kagi-search-api?utm_source=alternatives&utm_campaign=migrate-kagi) page.

## What else Kagi Search API users price

### Brave Search API

A search API on Brave's own index at $5 per 1,000 requests, with $5 in free credits every month and 50 queries per second. SpecStream answers Brave's call at `https://api.specstream.ai/res/v1/web/search` at the same price per call and takes up to 8,800 searches a minute on one account.

### Tavily

A search API sold in credits at $0.008 each pay as you go: a basic search takes 1 credit and an advanced search 2. SpecStream answers Tavily's `POST /search` at `https://api.specstream.ai/tavily` for $0.005, basic or advanced.

### Exa

A search API on Exa's own index, at $7 per 1,000 requests on `auto` and $4 on `lite` for up to 10 results, with its own request and reply. SpecStream answers Exa's call as well, at `https://api.specstream.ai/exa`, for $0.005 a search.

## How to migrate, step by step

1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 2,000 searches.

2. Set the address to `https://api.specstream.ai/kagi/api/v1` where your code has `https://kagi.com/api/v1`, and send the SpecStream key as the Bearer token. In Python:

```
import requests

BASE = "https://api.specstream.ai/kagi/api/v1"  # was https://kagi.com/api/v1

reply = requests.post(
    f"{BASE}/search",
    headers={"Authorization": f"Bearer {SPECSTREAM_KEY}"},
    json={"query": "Who founded Mistral AI and when?", "limit": 10, "lens": {"time_relative": "month"}},
    timeout=30,
)
reply.raise_for_status()
for result in reply.json()["data"]["search"]:
    print(result["title"], result["url"], result["snippet"])
```

3. In JavaScript:

```
const res = await fetch("https://api.specstream.ai/kagi/api/v1/search", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SPECSTREAM_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ query: "Who founded Mistral AI and when?", limit: 10 }),
});
const data = await res.json();
for (const result of data.data.search) console.log(result.title, result.url);
```

4. Read `402` as an empty balance and `429` as a call to send again after `Retry-After`; neither is charged.

5. When your product needs every match in place of a results page, write the request in plain words. SpecStream reads it back as the conditions every row must meet and the facts to bring back, quotes the most it can cost, and delivers the rows after you approve.

## Frequently asked questions

### Is there a Kagi Search API compatible API?

Yes. SpecStream answers Kagi's `POST /api/v1/search` at `https://api.specstream.ai/kagi/api/v1` in Kagi's JSON, checked on production on November 10, 2026, for $0.005 a search of up to 10 results.

### How do I migrate from the Kagi Search API?

Change one address: `https://api.specstream.ai/kagi/api/v1` in place of `https://kagi.com/api/v1`, and a SpecStream key as the Bearer token. The body and the code that reads `data.search[]` stay as they are.

### How much does the Kagi Search API cost?

Kagi charges $12 per 1,000 search requests and $4 per 1,000 pages on its Extract API, invoiced every 30 days. SpecStream charges $5 per 1,000 searches of up to 10 results, page text included.

### Which apps and SDKs take the SpecStream address for Kagi Search API?

`kagiapi` 0.2.1, Kagi's v0 Python client: set `KagiClient.BASE_URL = "https://api.specstream.ai/kagi/api/v0"`.

### Does Kagi's Python client work with SpecStream?

Yes. Kagi's generated client (`openapi_client` 1.0.0) ran every check in the pass table with `host="https://api.specstream.ai/kagi/api/v1"`, and `kagiapi` 0.2.1 with `KagiClient.BASE_URL` set to `https://api.specstream.ai/kagi/api/v0`.

### Does the route return images, news or videos?

No: the route answers `workflow` `search` with web results, and another workflow gets `400` with the reason. A web search of up to 10 results costs $0.005.

### Which Kagi fields does SpecStream not return?

Five on v1: `image`, `props`, `related_search`, `direct_answer` and `infobox`. Each result has `url`, `title` and `snippet`, and `time` when the page has a date.

### What happens when search is busy?

The route answers `429` with a `Retry-After` header and charges nothing. One account can send up to 8,800 searches a minute.

## Sources

SpecStream wrote this page. Each Kagi figure comes from Kagi's own pages, and each other provider's figure from that company's own page. The route's behavior is taken from its code and from the pass table measured on production on November 10, 2026.

- [Kagi API pricing](https://kagi.com/api/pricing), read Nov 10, 2026
- [Kagi API](https://kagi.com/products/api), read Nov 10, 2026
- [Kagi Search API docs](https://help.kagi.com/kagi/api/search.html), read Nov 10, 2026
- [SpecStream pass table, Kagi route](https://specstream.ai/specstream/dialects/kagi.md), read Nov 10, 2026
- [Brave Search API](https://brave.com/search/api/), read Nov 9, 2026
- [Tavily API credits](https://docs.tavily.com/documentation/api-credits.md), read Nov 9, 2026
- [Exa pricing](https://exa.ai/docs/admin/pricing.md), read Nov 9, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
