{"openapi":"3.1.0","info":{"title":"Neurobird Search API","description":"Web search API for AI agents and developers, from $2 per 1,000 searches.\n\nOne call runs the whole retrieval path: fan out across many search engines, fuse the\nrankings with reciprocal rank fusion, fetch and extract the top pages, rank the\npassages inside them, and optionally write an answer whose every supporting quote is\nchecked back against its source text.\n\n**Compatible with Tavily.** The request and response shapes match, so an existing\nTavily client switches by changing the base URL to `https://search.neurobird.com` and\nthe bearer token to a Neurobird key.\n\n**Getting a key:** `POST /keys` with no authentication returns a key carrying 1,000\nfree credits a month. There is no signup form, no email and no card.\n\n**Credits:** basic or standard search 1, advanced search 2, grounded answer +1,\nstructured extraction +1, `/extract` 1 per page.\n\n**Paying:** prepaid credit packs in crypto (`POST /billing/crypto/checkout`), or per\ncall with x402 and no account at all. `GET /payments` describes every option.\n\n**MCP:** a hosted Model Context Protocol server is available at `POST /mcp` over\nstreamable HTTP, exposing `web_search` and `extract_url`.","contact":{"name":"Neurobird Search support","url":"https://search.neurobird.com/","email":"office@neurobird.com"},"license":{"name":"Terms of Service","url":"https://search.neurobird.com/terms"},"version":"1.0.0"},"servers":[{"url":"https://search.neurobird.com","description":"Production"}],"paths":{"/search":{"post":{"summary":"Search the web","operationId":"search_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Search the live web and get ranked results with the relevant passages already extracted from each page, so a follow up fetch is usually unnecessary.\n\nUse `search_depth: \"basic\"` for a quick lookup (1 credit), `\"standard\"` to open and read the top pages (1 credit), or `\"advanced\"` to also expand the query and read more pages (2 credits). Set `include_answer: true` (+1 credit) for a grounded summary, and `verify_quotes: true` to have every supporting quote checked against its source text and returned marked verified or not.\n\nAccepts the same fields as Tavily's search endpoint. Also accepts `schema`, a JSON Schema filled from each result, and returns per stage `timings`.\n\nCan be paid per call with x402 instead of a key: send an `Accept` containing `payment-required`, or `?x402=1`, to receive a 402 challenge.","security":[]}},"/paid/search":{"post":{"summary":"Search, payment required (x402 or MPP)","description":"The same search, but always priced.\n\n`/search` keeps a free demo lane, which means it answers 200 to an\nunauthenticated caller and is therefore not a payment-required resource in\nthe protocol sense. This route always issues a challenge, so agents and the\nMPP and x402 registries have an endpoint whose terms are unambiguous.\n\nBoth protocols are offered on the same 402: an MPP challenge in\n`WWW-Authenticate: Payment` and an x402 challenge in `PAYMENT-REQUIRED`.","operationId":"paid_search_paid_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"},"example":{"query":"what is reciprocal rank fusion","search_depth":"basic","max_results":5}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The response carries an MPP challenge in `WWW-Authenticate: Payment` and an x402 challenge in the base64 `PAYMENT-REQUIRED` header. Pay with either and retry: MPP credentials go in `Authorization: Payment`, x402 payloads in `PAYMENT-SIGNATURE`. Both settle through the same x402 facilitator.","headers":{"WWW-Authenticate":{"description":"MPP challenge using the Payment scheme.","schema":{"type":"string"}},"PAYMENT-REQUIRED":{"description":"Base64 encoded x402 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}}},"x-payment-info":{"offers":[{"method":"evm","intent":"charge","amount":"5000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","recipient":"0xB8156B85D26df44A662d151EE00d1205FC254c47","methodDetails":{"chainId":8453},"description":"Web search with page passages extracted, $0.005 per request"}]}}},"/search/stream":{"post":{"summary":"Search with streamed stages (SSE)","description":"Emit each pipeline stage as it completes.\n\nAn agent can start reading ranked links while extraction and summarisation\nare still running, which removes most of the perceived latency of deep search.","operationId":"search_stream_search_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/extract":{"post":{"summary":"Extract clean page content","operationId":"extract_extract_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Fetch one or more URLs and return the main content as clean markdown, with navigation, adverts and boilerplate removed. PDFs are converted to text.\n\nPass `query` to trim each page to the passages relevant to it. Pass `schema` to fill a JSON Schema from each page. Costs 1 credit per page.","security":[]}},"/keys":{"post":{"summary":"Create a free API key (no signup)","operationId":"create_key_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Key Keys Post"}}}}},"description":"Create a free API key. No authentication, no signup form, no email, no card. The key carries 1,000 credits a month, renewed each calendar month, with every endpoint and feature available.","security":[]}},"/usage":{"get":{"summary":"Usage for the calling key","operationId":"usage_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Usage Usage Get"}}}}},"description":"Request count, credits consumed and average latency for the calling key."}},"/payments":{"get":{"summary":"How this API can be paid for","description":"Machine readable payment options.\n\nAn agent deciding whether it can use this service should be able to find out\nwithout first triggering a 402.","operationId":"payments_payments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Payments Payments Get"}}}}},"security":[]}},"/health":{"get":{"summary":"Service health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}},"description":"Service health: whether the retrieval backend is reachable, how many egress addresses are active, and whether answer generation is available.","security":[]}},"/v1/search":{"post":{"summary":"Search the web","operationId":"search_v1_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Search the live web and get ranked results with the relevant passages already extracted from each page, so a follow up fetch is usually unnecessary.\n\nUse `search_depth: \"basic\"` for a quick lookup (1 credit), `\"standard\"` to open and read the top pages (1 credit), or `\"advanced\"` to also expand the query and read more pages (2 credits). Set `include_answer: true` (+1 credit) for a grounded summary, and `verify_quotes: true` to have every supporting quote checked against its source text and returned marked verified or not.\n\nAccepts the same fields as Tavily's search endpoint. Also accepts `schema`, a JSON Schema filled from each result, and returns per stage `timings`.\n\nCan be paid per call with x402 instead of a key: send an `Accept` containing `payment-required`, or `?x402=1`, to receive a 402 challenge.","security":[]}},"/v1/paid/search":{"post":{"summary":"Search, payment required (x402 or MPP)","description":"The same search, but always priced.\n\n`/search` keeps a free demo lane, which means it answers 200 to an\nunauthenticated caller and is therefore not a payment-required resource in\nthe protocol sense. This route always issues a challenge, so agents and the\nMPP and x402 registries have an endpoint whose terms are unambiguous.\n\nBoth protocols are offered on the same 402: an MPP challenge in\n`WWW-Authenticate: Payment` and an x402 challenge in `PAYMENT-REQUIRED`.","operationId":"paid_search_v1_paid_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"},"example":{"query":"what is reciprocal rank fusion","search_depth":"basic","max_results":5}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The response carries an MPP challenge in `WWW-Authenticate: Payment` and an x402 challenge in the base64 `PAYMENT-REQUIRED` header. Pay with either and retry: MPP credentials go in `Authorization: Payment`, x402 payloads in `PAYMENT-SIGNATURE`. Both settle through the same x402 facilitator.","headers":{"WWW-Authenticate":{"description":"MPP challenge using the Payment scheme.","schema":{"type":"string"}},"PAYMENT-REQUIRED":{"description":"Base64 encoded x402 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}}},"x-payment-info":{"offers":[{"method":"evm","intent":"charge","amount":"5000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","recipient":"0xB8156B85D26df44A662d151EE00d1205FC254c47","methodDetails":{"chainId":8453},"description":"Web search with page passages extracted, $0.005 per request"}]}}},"/v1/search/stream":{"post":{"summary":"Search with streamed stages (SSE)","description":"Emit each pipeline stage as it completes.\n\nAn agent can start reading ranked links while extraction and summarisation\nare still running, which removes most of the perceived latency of deep search.","operationId":"search_stream_v1_search_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/v1/extract":{"post":{"summary":"Extract clean page content","operationId":"extract_v1_extract_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Fetch one or more URLs and return the main content as clean markdown, with navigation, adverts and boilerplate removed. PDFs are converted to text.\n\nPass `query` to trim each page to the passages relevant to it. Pass `schema` to fill a JSON Schema from each page. Costs 1 credit per page.","security":[]}},"/v1/keys":{"post":{"summary":"Create a free API key (no signup)","operationId":"create_key_v1_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Key V1 Keys Post"}}}}},"description":"Create a free API key. No authentication, no signup form, no email, no card. The key carries 1,000 credits a month, renewed each calendar month, with every endpoint and feature available.","security":[]}},"/v1/usage":{"get":{"summary":"Usage for the calling key","operationId":"usage_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Usage V1 Usage Get"}}}}},"description":"Request count, credits consumed and average latency for the calling key."}},"/v1/payments":{"get":{"summary":"How this API can be paid for","description":"Machine readable payment options.\n\nAn agent deciding whether it can use this service should be able to find out\nwithout first triggering a 402.","operationId":"payments_v1_payments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Payments V1 Payments Get"}}}}},"security":[]}},"/v1/health":{"get":{"summary":"Service health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health V1 Health Get"}}}}},"description":"Service health: whether the retrieval backend is reachable, how many egress addresses are active, and whether answer generation is available.","security":[]}},"/billing/packages":{"get":{"summary":"Credit packs available for purchase","operationId":"packages_billing_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Packages Billing Packages Get"}}}}},"description":"Credit packs available for purchase, the price per 1,000 for each, which payment methods are live, and what each kind of request costs in credits.","security":[]}},"/billing/balance":{"get":{"summary":"Credit balance for the calling key","operationId":"balance_billing_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Balance Billing Balance Get"}}}}},"description":"Credit balance for the calling key, split into the free monthly grant and purchased credits, with purchase history."}},"/billing/checkout":{"post":{"summary":"Start a checkout for a credit pack","description":"Create a Creem checkout session and hand back its URL.\n\nThe caller must present the API key the credits should land on, so payment\nis bound to a key up front rather than guessed from the buyer's email later.","operationId":"checkout_billing_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Checkout Billing Checkout Post"}}}}}}},"/billing/crypto/checkout":{"post":{"summary":"Buy a credit pack with crypto","description":"Create a NOWPayments invoice for a credit pack.\n\nThe order id is ours and is echoed back on the callback, which is how a\npayment is tied to an API key without trusting anything sent by the payer.","operationId":"crypto_checkout_billing_crypto_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Crypto Checkout Billing Crypto Checkout Post"}}}}}}},"/v1/billing/packages":{"get":{"summary":"Credit packs available for purchase","operationId":"packages_v1_billing_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Packages V1 Billing Packages Get"}}}}},"description":"Credit packs available for purchase, the price per 1,000 for each, which payment methods are live, and what each kind of request costs in credits.","security":[]}},"/v1/billing/balance":{"get":{"summary":"Credit balance for the calling key","operationId":"balance_v1_billing_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Balance V1 Billing Balance Get"}}}}},"description":"Credit balance for the calling key, split into the free monthly grant and purchased credits, with purchase history."}},"/v1/billing/checkout":{"post":{"summary":"Start a checkout for a credit pack","description":"Create a Creem checkout session and hand back its URL.\n\nThe caller must present the API key the credits should land on, so payment\nis bound to a key up front rather than guessed from the buyer's email later.","operationId":"checkout_v1_billing_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Checkout V1 Billing Checkout Post"}}}}}}},"/v1/billing/crypto/checkout":{"post":{"summary":"Buy a credit pack with crypto","description":"Create a NOWPayments invoice for a credit pack.\n\nThe order id is ours and is echoed back on the callback, which is how a\npayment is tied to an API key without trusting anything sent by the payer.","operationId":"crypto_checkout_v1_billing_crypto_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Crypto Checkout V1 Billing Crypto Checkout Post"}}}}}}},"/mcp":{"post":{"tags":["mcp"],"summary":"Model Context Protocol server (streamable HTTP)","operationId":"mcp","description":"A hosted MCP server over the streamable HTTP transport, speaking JSON-RPC 2.0. Add it to Claude Code with:\n\n```\nclaude mcp add --transport http neurobird-search https://search.neurobird.com/mcp --header \"Authorization: Bearer $KEY\"\n```\n\nThe same URL works in any MCP client that supports streamable HTTP, including Cursor, Windsurf, Zed and the Claude desktop app.\n\nMethods: `initialize`, `tools/list`, `tools/call`, `ping`.\nTools: `web_search` (ranked sources with page passages already extracted) and `extract_url` (any page as clean markdown).","security":[{"ApiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"description":"Omitted for notifications."},"method":{"type":"string","enum":["initialize","tools/list","tools/call","ping"]},"params":{"type":"object"}}},"example":{"jsonrpc":"2.0","id":1,"method":"tools/list"}}}},"responses":{"200":{"description":"JSON-RPC result.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Accepted notification, no body."}}}}},"components":{"schemas":{"ExtractFailure":{"properties":{"url":{"type":"string","title":"Url"},"error":{"type":"string","title":"Error"}},"type":"object","required":["url","error"],"title":"ExtractFailure"},"ExtractRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","maxItems":40,"minItems":1,"title":"Urls"},"format":{"type":"string","enum":["markdown","text"],"title":"Format","default":"markdown"},"include_images":{"type":"boolean","title":"Include Images","default":false},"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},"type":"object","required":["urls"],"title":"ExtractRequest"},"ExtractResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ExtractResult"},"type":"array","title":"Results"},"failed_results":{"items":{"$ref":"#/components/schemas/ExtractFailure"},"type":"array","title":"Failed Results"},"response_time":{"type":"number","title":"Response Time"},"request_id":{"type":"string","title":"Request Id"},"credits":{"type":"integer","title":"Credits","default":1}},"type":"object","required":["results","response_time","request_id"],"title":"ExtractResponse"},"ExtractResult":{"properties":{"url":{"type":"string","title":"Url"},"title":{"type":"string","title":"Title","default":""},"raw_content":{"type":"string","title":"Raw Content","default":""},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"structured":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured"},"words":{"type":"integer","title":"Words","default":0}},"type":"object","required":["url"],"title":"ExtractResult"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Quote":{"properties":{"text":{"type":"string","title":"Text"},"url":{"type":"string","title":"Url"},"verified":{"type":"boolean","title":"Verified"}},"type":"object","required":["text","url","verified"],"title":"Quote"},"SearchRequest":{"properties":{"query":{"type":"string","maxLength":2000,"minLength":1,"title":"Query"},"search_depth":{"type":"string","enum":["basic","standard","advanced"],"title":"Search Depth","default":"basic"},"topic":{"type":"string","enum":["general","news","code","science","finance"],"title":"Topic","default":"general"},"max_results":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Max Results","default":5},"days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Days"},"time_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Range"},"include_domains":{"items":{"type":"string"},"type":"array","maxItems":150,"title":"Include Domains"},"exclude_domains":{"items":{"type":"string"},"type":"array","maxItems":150,"title":"Exclude Domains"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"include_answer":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["basic","advanced"]}],"title":"Include Answer","default":false},"include_raw_content":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["markdown","text"]}],"title":"Include Raw Content","default":false},"include_images":{"type":"boolean","title":"Include Images","default":false},"verify_quotes":{"type":"boolean","title":"Verify Quotes","default":false},"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema"},"expand_query":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Expand Query"},"chunks_per_source":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Chunks Per Source","default":3}},"type":"object","required":["query"],"title":"SearchRequest"},"SearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"},"results":{"items":{"$ref":"#/components/schemas/SearchResult"},"type":"array","title":"Results"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Images"},"response_time":{"type":"number","title":"Response Time"},"request_id":{"type":"string","title":"Request Id"},"quotes":{"items":{"$ref":"#/components/schemas/Quote"},"type":"array","title":"Quotes"},"sub_queries":{"items":{"type":"string"},"type":"array","title":"Sub Queries"},"credits":{"type":"integer","title":"Credits","default":1},"depth":{"type":"string","title":"Depth","default":"basic"},"timings":{"additionalProperties":{"type":"integer"},"type":"object","title":"Timings"},"cached":{"type":"boolean","title":"Cached","default":false},"provider":{"type":"string","title":"Provider","default":"searxng"}},"type":"object","required":["query","results","response_time","request_id"],"title":"SearchResponse"},"SearchResult":{"properties":{"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url"},"content":{"type":"string","title":"Content"},"score":{"type":"number","title":"Score"},"raw_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Content"},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Date"},"engines":{"items":{"type":"string"},"type":"array","title":"Engines"},"domain":{"type":"string","title":"Domain","default":""},"extracted":{"type":"boolean","title":"Extracted","default":false},"structured":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured"}},"type":"object","required":["title","url","content","score"],"title":"SearchResult"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKeyBearer":{"type":"http","scheme":"bearer","description":"A Neurobird API key, sent as `Authorization: Bearer nbs-...`. Create one with an unauthenticated `POST /keys`. Keys carry 1,000 free credits a month."},"ApiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key","description":"The same key, for clients that prefer an `x-api-key` header."}}},"tags":[{"name":"search","description":"Web search and content extraction."},{"name":"keys","description":"Free API keys, usage and credit balance."},{"name":"billing","description":"Credit packs and payment options."},{"name":"mcp","description":"Model Context Protocol server."}],"security":[{"ApiKeyBearer":[]}],"externalDocs":{"description":"Landing page, pricing and live demo","url":"https://search.neurobird.com"}}