Web Search for Any Model: Bumo Router :online vs OpenRouter's Web Plugin
Bumo Router now supports OpenRouter-style :online. Append it to any model ID and the model searches the web first, then answers with url_citation sources. $0.0008 per search, free when nothing is found. Side-by-side usage and pricing.

Bumo Router supports the same :online suffix as OpenRouter. Change "model": "gemini-3.8-flash" to "gemini-3.8-flash:online" and the model searches the web before answering, then appends a source list with url_citation annotations. Each search costs $0.0008. If the search fails or finds nothing, there is no search charge.
If you already use OpenRouter's web search, the request shape is the same, so most code works after you change the base URL and key. The differences are in how many results come back, what you can configure, and the price. Both are covered below.
Get a key at router.bumo.ai/user/api-keys. Billing is in USD.
The one-line change
curl https://router.bumo.ai/v1/chat/completions \
-H "Authorization: Bearer $BUMO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.8-flash:online",
"messages": [{"role": "user", "content": "What happened in AI this week?"}]
}'
With the OpenAI Python SDK:
from openai import OpenAI
client = OpenAI(base_url="https://router.bumo.ai/v1", api_key="YOUR_ROUTER_KEY")
resp = client.chat.completions.create(
model="gpt-6.1-sol:online", # was gpt-6.1-sol
messages=[{"role": "user", "content": "What happened in AI this week?"}],
)
print(resp.choices[0].message.content)
print(resp.choices[0].message.annotations) # url_citation entries
Streaming works too. The source list arrives as the last content delta, right before the chunk that carries finish_reason.
The Responses API and Codex CLI
On /v1/responses, pass the web_search tool (or web_search_preview) and Router runs the search itself:
curl https://router.bumo.ai/v1/responses \
-H "Authorization: Bearer $BUMO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.8-flash",
"tools": [{"type": "web_search"}],
"input": "What happened in AI this week?"
}'
This matters for Codex CLI. Codex sends a web_search tool with every request, but its default is cached mode (external_web_access: false), not live search. Router has no cache index, so in cached mode it skips the search and does not charge. To get live search with Router models, start Codex with codex --search, or set web_search = "live" in ~/.codex/config.toml.
Side by side
How you turn it on
- OpenRouter:
:onlinesuffix, or"plugins": [{"id": "web"}]in the request body.:onlineis documented as exactly equivalent to the plugin. - Bumo Router:
:onlinesuffix on Chat Completions, or theweb_searchtool on the Responses API. There is nopluginsfield.
Search engine
- OpenRouter: native provider search for Anthropic, Google, OpenAI, Perplexity and SpaceXAI models; Exa for other models. You can pick an engine (
native,exa,firecrawl,parallel,perplexity). - Bumo Router: DeepSeek Search for every model. Not configurable.
Results and options
- OpenRouter:
max_results(default 5),include_domains/exclude_domainson supported engines, engine-specific modes, and opt-in X search for SpaceXAI models. - Bumo Router: a fixed 5 results per search, one search per request, using the latest user message as the query (truncated at 128 characters). No domain filters.
Output format
- Both: answers cite sources inline as
[n], andmessage.annotationscontainsurl_citationobjects withurl,title,content,start_indexandend_index. Bumo Router follows OpenRouter's schema, so parsing code carries over. - Bumo Router also appends a readable "Sources:" list to the answer text, so end users see links even if your app ignores annotations.
Price per search (from each provider's docs and pricing page as of November 4, 2026)
- OpenRouter with Exa (the default for non-native models): $0.007 per request in Auto mode, up to 10 results.
- OpenRouter with Parallel: $0.001 (Turbo, Fast) or $0.005 (Basic, Advanced) per request.
- OpenRouter with Perplexity: $0.005 per request. Firecrawl: $0.005 per search plus $0.0125 per result.
- OpenRouter with native search: passed through from the model provider.
- Bumo Router: $0.0008 per successful search, any model. That is DeepSeek's $0.75 per 1,000 rate plus the same 6% Router adds to model prices, rounded up to the smallest billing unit. No charge when the search returns nothing or fails.
On both services, search results are sent to the model as input, so they add input tokens at the model's normal rate.

Which one to use
OpenRouter gives you more control: engine choice, result count, domain filters, and provider-native search on the big Western models. If you need any of those, it is the better fit.
Bumo Router is simpler and cheaper per call. One search engine, fixed defaults, and $0.0008 per search instead of $0.005 to $0.007 on the common OpenRouter engines. It is a good fit for chat apps and agents that just need "answer with fresh sources" at high volume, especially if you already use Router for Chinese models such as DeepSeek, Kimi, GLM and Qwen.
Behavior worth knowing
- Failures don't break the request. If the search errors out or times out, the model answers without search results. The
x-bumo-web-searchresponse header tells you what happened:ok; results=5,empty,failed; timeout,failed; error, orskipped. - Tool-result turns are not searched. When the last message is a tool result rather than a user message, Router skips the search and does not charge. Agents don't pay for a search on every step.
- Search results are marked as untrusted. They are wrapped and labeled as third-party content, and the model is told not to follow instructions found in them.
- Not on the Anthropic endpoint.
:onlineis not recognized on/v1/messages, which is what Claude Code uses. Use Chat Completions or Responses for web search. - Separate billing line. Your wallet shows search charges on their own "Web search" line, apart from token usage.
FAQ
Do I need a separate search API key? No. Your Router key covers it, and search fees come out of your Router balance.
Can I mix online and offline requests? Yes. The suffix applies per request. Requests without :online are not searched and not charged for search.
Is there a China-region endpoint? Yes, router.bumo.cc bills in CNY at ¥0.005 per search. Keys are not shared between the two sites.
