{"record":{"id":"db3a7c38736db39c","repo":"musistudio/claude-code-router","slug":"gateway-bing-web-search-api-key-is-not-configure","errorCode":null,"errorMessage":"[gateway] Bing web search API key is not configured.","messagePattern":"\\[gateway\\] Bing web search API key is not configured\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/core/src/gateway/features/hosted-web-search/discovery.ts","lineNumber":558,"sourceCode":"  if (!apiKey) {\n    console.warn(\"[gateway] Brave web search API key is not configured.\");\n    return [];\n  }\n  const url = new URL(searchEnv(input, \"BRAVE_SEARCH_ENDPOINT\") || \"https://api.search.brave.com/res/v1/web/search\");\n  url.searchParams.set(\"q\", input.query);\n  url.searchParams.set(\"count\", String(input.count));\n  const raw = await fetchJson(url.toString(), {\n    headers: { \"x-subscription-token\": apiKey },\n    signal: AbortSignal.timeout(input.timeoutMs)\n  });\n  const items = isRecord(raw) && isRecord(raw.web) && Array.isArray(raw.web.results) ? raw.web.results : [];\n  return items.map((item) => webSearchResult(item, \"title\", \"url\", \"description\")).filter(isWebSearchProviderResult);\n}\n\nasync function searchBing(input: WebSearchProviderInput): Promise<WebSearchProviderResult[]> {\n  const apiKey = searchEnv(input, \"BING_SEARCH_API_KEY\");\n  if (!apiKey) {\n    console.warn(\"[gateway] Bing web search API key is not configured.\");\n    return [];\n  }\n  const url = new URL(searchEnv(input, \"BING_SEARCH_ENDPOINT\") || \"https://api.bing.microsoft.com/v7.0/search\");\n  url.searchParams.set(\"q\", input.query);\n  url.searchParams.set(\"count\", String(input.count));\n  url.searchParams.set(\"mkt\", \"en-US\");\n  const raw = await fetchJson(url.toString(), {\n    headers: { \"ocp-apim-subscription-key\": apiKey },\n    signal: AbortSignal.timeout(input.timeoutMs)\n  });\n  const items = isRecord(raw) && isRecord(raw.webPages) && Array.isArray(raw.webPages.value) ? raw.webPages.value : [];\n  return items.map((item) => webSearchResult(item, \"name\", \"url\", \"snippet\")).filter(isWebSearchProviderResult);\n}\n\nasync function searchGoogleCse(input: WebSearchProviderInput): Promise<WebSearchProviderResult[]> {\n  const apiKey = searchEnv(input, \"GOOGLE_SEARCH_API_KEY\");\n  const cx = searchEnv(input, \"GOOGLE_SEARCH_CX\");\n  if (!apiKey || !cx) {","sourceCodeStart":540,"sourceCodeEnd":576,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/core/src/gateway/features/hosted-web-search/discovery.ts#L540-L576","documentation":"The hosted web search feature selected the Bing provider, but BING_SEARCH_API_KEY is not present in the resolved environment. The provider returns empty results instead of throwing, so a missing key degrades into zero search results.","triggerScenarios":"Configuring web search provider to \"bing\" without BING_SEARCH_API_KEY; running the gateway in a container/service where the variable was never exported; key present only at build time not runtime.","commonSituations":"Env var name mismatch (e.g. AZURE_BING_KEY vs BING_SEARCH_API_KEY); .env not loaded; rotating keys and forgetting to update the gateway environment.","solutions":["Set BING_SEARCH_API_KEY in the gateway process environment","Verify the variable is visible: print process.env.BING_SEARCH_API_KEY from the gateway context or check the service unit file","Restart the gateway after setting the key"],"exampleFix":"# before\nWEB_SEARCH_PROVIDER=bing\n\n# after\nBING_SEARCH_API_KEY=<your-azure-bing-key>\nWEB_SEARCH_PROVIDER=bing","handlingStrategy":"validation","validationCode":"if (!process.env.BING_SEARCH_API_KEY) {\n  throw new Error(\"BING_SEARCH_API_KEY must be set before enabling the bing web search provider\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate required env vars per provider at boot","Use a secrets manager to inject keys consistently","Log resolved provider config at startup"],"tags":["web-search","bing","env-var","api-key"],"backgroundTag":"missing-env-var","analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}