Cloudflare launched a Web Search API on October 2, 2026, one endpoint that lets an AI agent search the live web through three providers: Ceramic.ai at $0.25 per 1,000 requests, Linkup at $5 and Exa at $7, billed at each provider's list price with no Cloudflare markup. It is in open beta, callable over REST or from a Worker, and switching providers is a one-word change in the request.
That matters because search is now the line item that grows fastest in an agent's bill. A research or content agent that runs three searches per task pays anywhere from $7.50 to $300 for 30,000 searches, depending on which API it calls. Below: what Cloudflare shipped, how it prices against Brave, Tavily, Exa direct and Claude's built-in search tool, what the response leaves out, and how to wire it into an agent in about 15 minutes. The Cloudflare changelog entry labels it beta, so expect the details to move.
What Cloudflare shipped on October 2
The Web Search API lives inside AI Gateway, the proxy Cloudflare already sells for routing, logging and billing model calls. Search now runs through the same control plane, so a search request shows up in the same logs and draws on the same AI Gateway credits as the model calls around it.
There are two ways in:
- REST: a POST to
/client/v4/accounts/{account_id}/ai/websearch/with an API token. - Workers binding:
env.AI.websearch()from inside a Cloudflare Worker, passing agatewayId.
Authors Michelle Chen and Sam Else describe the goal as giving agents "fresh, structured snippets from the web injected straight into context." The post also lists what is not here yet: native server tools inside AI Gateway, which would let a model call search without your code running the tool loop, are marked "coming soon." Today, your agent code decides when to search and passes the results back to the model itself.
Two account options sit underneath. Pay with AI Gateway credits and Cloudflare bills each search at the provider's list price. Or bring your own key (BYOK): store a Ceramic, Exa or Linkup key in AI Gateway, pass its alias as byokAlias, and the provider bills you directly.
Three providers, one endpoint
The provider docs lock each partner to a single search mode, and that is the detail most launch coverage skipped:
- Ceramic.ai (the default,
"provider": "ceramic") runs its own index of more than 40 billion pages and returns descriptions of up to 8,000 characters per page. Ceramic was founded by former Google VP Anna Patterson, launched in Q2 2026 and claims responses "as fast as 50ms." Zero Data Retention: yes. - Exa (
"exa") combines keyword and embeddings search and returns highlighted snippets relevant to the query. Cloudflare runs it in Exa'sautomode only. Zero Data Retention: no. - Linkup (
"linkup") returns sourced results with text snippets, at itsfastdepth with raw results and no generated answer. Zero Data Retention: yes.
The single-mode lock is a real trade. Exa sold direct also offers Instant search at $4 per 1,000 and Deep search at $12 to $15, and Linkup direct offers deep search at $0.25 to $2.50 per request. None of those modes are reachable through Cloudflare today. You get one balanced mode per provider in exchange for one schema, one bill and one log.

Agent search prices compared
Here is what one search costs across the APIs an agent builder is most likely to weigh, from each vendor's own pricing page on October 5, 2026:
| Search API | Price per 1,000 searches | Free allowance | Own index | Zero Data Retention |
|---|---|---|---|---|
| Cloudflare + Ceramic | $0.25 | 1,000 queries (Ceramic direct) | Yes, 40B+ pages | Yes |
| Cloudflare + Linkup | $5.00 | 4,000 queries (Linkup direct) | Not stated | Yes |
| Brave Search API | $5.00 | $5 credit every month | Yes, 40B+ pages | Enterprise plan |
| Cloudflare + Exa | $7.00 | $10 credit (Exa direct) | Yes | No |
| Tavily (basic search) | $8.00 | 1,000 credits a month | Not stated | Not stated |
| Claude web search tool | $10.00 plus tokens | None stated | Not stated | See Anthropic docs |
Prices come from Exa pricing, Linkup pricing, Brave Search API, Tavily pricing with its credit rules (a basic search is 1 credit at $0.008, an advanced search is 2) and the Claude web search tool docs. The free allowances listed for the Cloudflare rows are the providers' own sign-up offers; the Cloudflare docs do not say whether they apply when you pay with AI Gateway credits.
Two things stand out. First, the Cloudflare prices match the providers' direct list prices exactly ($7 per 1,000 for Exa auto, and Linkup lists $0.005 to $0.006 per fast search), so "no markup" holds up. Second, Ceramic is the outlier: 20 times cheaper than Brave or Linkup and 28 times cheaper than Exa. Cheap is not the same as good, and nobody has published an independent relevance test of Ceramic's index yet.
What 30,000 searches cost
Per-1,000 prices are hard to feel. Take a concrete workload: an agent that handles 10,000 tasks a month, such as briefing notes, product research or fact checks for a content pipeline. Anthropic's own guidance is that simple factual queries use 1 to 3 searches and comparative research can use 10 or more, so 3 searches per task is a conservative 30,000 searches a month.
| API | 30,000 searches a month | Compared with Ceramic |
|---|---|---|
| Cloudflare + Ceramic | $7.50 | 1x |
| Cloudflare + Linkup | $150 | 20x |
| Brave Search API | $150 | 20x |
| Cloudflare + Exa | $210 | 28x |
| Tavily basic | $240 | 32x |
| Tavily advanced | $480 | 64x |
| Claude web search tool | $300 plus result tokens | 40x before tokens |
List prices before free allowances. The Claude row understates its real cost: search results are billed as input tokens on top of the $10 per 1,000, in the turn that searches and in every later turn that carries them. In exchange, Claude's tool runs the search loop for you, adds citations and supports domain allow and block lists.
At 10 searches per task, multiply every figure by 3.3. That is where the gap stops being a rounding error: $25 a month on Ceramic against $1,000 on Claude's tool or $700 on Exa.

What you get back, and what you do not
The request reference is deliberately small. A request takes a query (1 to 1,024 characters), a provider (default ceramic), a limit from 1 to 10 results (default 10) and an optional byokAlias. The response is an items array of url, title and description, plus metadata with the query, a request ID and latencyMs.
Missing from the reference, as of October 5:
- No domain filters. You cannot restrict results to, say, official docs sites. Claude's tool has
allowed_domainsandblocked_domains. - No date or freshness filter, and no published date on each result.
- No more than 10 results per call. Exa direct charges $1 per 1,000 extra results above 10; Cloudflare simply caps it.
- No full-page content. You get descriptions, not extracted pages. An agent that needs the full text still has to fetch each URL.
- No published rate limits yet.
For grounding a chatbot or giving a writing agent a fact check, the snippets are enough. For deep research, where the agent reads ten sources end to end, plan on a separate fetch or crawl step.
How to wire it into an agent in 15 minutes
- Create a Cloudflare account and an API token, following Cloudflare's token guide. Note your account ID from the dashboard.
- Use the default gateway or create one under AI Gateway. The examples in Cloudflare's docs pass
"gateway": {"id": "default"}. - Add credits or a provider key. Either top up AI Gateway credits, or add your existing Exa, Linkup or Ceramic key under the gateway's Provider Keys and give it an alias.
- Give your model a search tool. Declare a function such as
web_search(query: string)in your agent's tool list. When the model calls it, your code forwards the query to the endpoint above and returnsitemsas the tool result, keepingurlso the model can cite it. - Inside a Worker, skip the HTTP call: add the Workers AI binding named
AIand callawait env.AI.websearch({gatewayId: "default", query, provider: "exa", limit: 5}). - Run your own relevance test. Pick 20 queries your agent really sends, run each through
ceramic,linkupandexaby changing one field, and count how often the top 3 results contain what the agent needed. That afternoon decides whether the 28x price gap is worth it for your use case.
Test from a terminal:
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/websearch/ \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{"query": "ComfyUI release notes October 2026", "provider": "ceramic", "limit": 5, "options": {"gateway": {"id": "default"}}}'Step 7 is the real reason to use Cloudflare's endpoint even if you already have an Exa or Brave key. Comparing three search indexes normally means three SDKs, three schemas and three bills. Here it is one field.

Where it fits next to Claude's search and Web IQ
Three patterns now exist for giving an agent the web, and they solve different problems:
- Built into the model API, like Claude's web search tool: the least code, citations included, domain filters, but tied to one model family and the most expensive per search once tokens are counted.
- A dedicated search API, like Brave, Tavily, Exa or Microsoft's Web IQ Bing API for agents: model-agnostic, deeper options (full content, deep modes, filters), one vendor per integration.
- A search router, which is what Cloudflare just built: model-agnostic, several indexes behind one schema, logging in the same place as your model calls, but only one mode per provider and a thin response.
Cloudflare has been assembling the router layer piece by piece. Its Kitesurf agent browser on Workers covers the step after search, when an agent needs to load and act on a page. Put the two together and a Worker can search, open and read the web without leaving Cloudflare.
Who should switch now, and who should wait
Switch now if your agent already runs on Workers or AI Gateway, if search is a visible share of your bill, or if you have never measured whether a cheaper index is good enough. The relevance test in step 7 costs a few cents on Ceramic.
Stay where you are if your agent depends on domain filters, full-page extraction, deep research modes or more than 10 results per query. Exa, Linkup and Tavily all sell those directly, and Claude's tool handles filters and citations without extra code.
Wait if you need a production SLA. This is an open beta with no published rate limits, and the "coming soon" server tools could change how the API is called. Build against it, keep your current provider as the fallback, and revisit when the beta label comes off.
Frequently asked questions
What is the Cloudflare Web Search API?
An open beta API, launched October 2, 2026, that lets AI agents search the web through AI Gateway. One endpoint routes queries to Ceramic.ai, Exa or Linkup and returns up to 10 results with a URL, title and description each.
How much does Cloudflare's Web Search API cost?
It charges the provider's list price with no markup: $0.25 per 1,000 searches with Ceramic.ai, $5 with Linkup and $7 with Exa. You pay with AI Gateway credits, or bring your own provider key and pay the provider directly.
Which search provider should I pick?
Start with Ceramic, the default and by far the cheapest, then run the same 20 real queries through Linkup and Exa. If Ceramic's top results answer your agent's questions, keep it. Choose Ceramic or Linkup if you need Zero Data Retention, since Exa does not offer it through Cloudflare.
Is it cheaper than Claude's built-in web search?
Per search, yes. Claude's tool costs $10 per 1,000 searches plus input tokens for the results, against $0.25 to $7 on Cloudflare. Claude's tool does more for that price, though: it runs the search loop itself, adds citations and supports domain filters.
Can I use it without Cloudflare Workers?
Yes. The REST endpoint works from any language or agent framework with an API token and your account ID. The Workers binding is a shortcut for code that already runs on Cloudflare.
Does it return the full text of web pages?
No. Results include a description (up to 8,000 characters per page with Ceramic), not the extracted page. Agents that need full articles must fetch each URL in a separate step.