Skip to main content

Web Search API

Search the live web through a single endpoint. Two modes — shorter (Serper / Google) and detailed (Exa / neural). Flat ₹1 per search.

Overview

One endpoint. By default we serve Serper web search (fast, current, citation-backed results); you can also pick shorter or detailed modes, or set an explicit provider. We route for you, charge a flat ₹1 per search, and return a normalised response shape.

Endpoint: POST /v1/search

Auth: Authorization: Bearer cm_your_key — the key must have the search permission (or *).

Cost: 1 credit (= ₹1) per successful search, regardless of mode or number of results. Failed upstream calls are not charged.

  1. 1

    Your app

    Send a + to

  2. 2

    CallMissed gateway

    Check the permission and pick the provider for the mode

  3. 3

    Search provider

    Default Serper web search · override with

  4. 4

    Your app

    Receive a normalized result list and get charged ₹1 only on success

Basic Usage

import httpx

r = httpx.post(
    "https://api.callmissed.com/v1/search",
    headers={"Authorization": "Bearer cm_your_key"},
    json={
        "query": "latest Indian AI startups raising funding",
        "mode": "shorter",       # or "detailed" / "auto"
        "num_results": 10,
    },
    timeout=15,
)
print(r.json()["results"][:3])

Modes

modeUnderlyingBest forp50 latency
shorterSerper web searchfast, current, citation-backed results~1–2s
detailedExa searchricher answers with cited sources~1–3s
autotenant default → platform default (Serper)let CallMissed pickdepends

By default all modes use Serper web search. You can override with provider: "serper" | "exa" | "firecrawl" | "linkup" directly; when both mode and provider are set, provider wins. exa/serper/firecrawl/linkup are all available and act as automatic fallbacks for resilience — if one provider errors, the request transparently retries another so you always get a result. All providers return the same normalised shape and the same flat ₹1 per search.

Operators can set the tenant default from Settings → Web search default.

Request Body

FieldTypeDefaultNotes
querystring(required)1–2000 chars
modestring"auto"auto / shorter / detailed
providerstring—Optional raw override: serper / exa / firecrawl / linkup. Wins over mode
num_resultsint101–50
search_typestringmode defaultExa: auto/fast/instant/deep-lite/deep. Serper: search/news/images
include_domainsstring[]—detailed mode only
exclude_domainsstring[]—detailed mode only
start_published_dateYYYY-MM-DD—detailed mode only
end_published_dateYYYY-MM-DD—detailed mode only
include_contentboolfalsedetailed mode only — fetch page text + highlights
glstring—shorter mode only — country ISO (e.g. in, us)
hlstring—shorter mode only — language ISO
tbsstring—shorter mode only — time filter, e.g. qdr:d (past day)

Response Shape

Responses are normalised across providers — same keys regardless of which backend ran the query.

{
  "query": "latest Indian AI startups raising funding",
  "mode": "shorter",
  "provider": "serper",
  "results": [
    {
      "title": "Acme AI raises $...",
      "url": "https://example.com/article",
      "snippet": "Acme AI announced a funding round led by...",
      "content": "Full text if include_content=true, else null",
      "published_date": "2026-04-10T00:00:00.000Z",
      "score": 0.92,
      "source": "example.com"
    }
  ],
  "answer": "Optional grounded answer (provider-dependent)",
  "images": null,
  "credits_used": 1,
  "balance": 495.0,
  "request_id": "search-a3f8c1d2e0b9",
  "latency_ms": 920
}

Pricing & Credits

  • Flat rate: 1 credit per successful search. 1 credit = ₹1.
  • Failed requests (upstream 5xx, rate limits, etc.) are not charged.
  • The charge is visible immediately in the credits_used + balance fields on the response, and in your credit history in the dashboard.
  • Per-key budget caps and the tenant monthly budget cap both apply — hitting either returns HTTP 402 insufficient_credits.

Permissions

API keys must have search (or *) in their service permissions. Edit a key in your dashboard (↳ Profile → API Keys → Edit) and tick the Search chip.

You can also restrict which search providers a single key may call by editing Allowed web-search providers on the same edit panel. A key restricted to serper can still use the endpoint, but calls with mode: "detailed" (or provider: "exa") will return HTTP 403 search_provider_not_allowed before any upstream request is made.

Errors

Error envelope matches the rest of /v1:

{ "error": { "message": "...", "type": "...", "code": "..." } }
StatusCodeMeaning
400invalid_request_errorMissing or malformed body
401invalid_api_keyBad or revoked key
402insufficient_creditsBalance < 1 credit or monthly budget exhausted
403permission_deniedKey lacks search permission
403search_provider_not_allowedKey's Allowed search providers excludes the requested provider
429rate_limit_exceededPer-key RPM exceeded
503provider_errorUpstream search provider unavailable