Skip to main content

API Guides & Tutorials

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, two modes. Pick shorter (Serper — Google SERP, sub-second) or detailed (Exa — neural search with optional page content + highlights). 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.

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

`mode`UnderlyingBest forp50 latency
shorterSerper Google SERPfreshness, location-aware, familiar Google-style results~1s
detailedExa neural searchsemantic / conceptual queries, optional page content + highlights~1–3s
autotenant default → platform defaultlet CallMissed pickdepends

You can also override with provider: "exa" | "serper" directly. When both mode and provider are set, provider wins.

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

Request Body

FieldTypeDefaultNotes
querystring(required)1–2000 chars
modestring"auto"auto / shorter / detailed
providerstringOptional raw override: exa / serper. 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-DDdetailed mode only
end_published_dateYYYY-MM-DDdetailed mode only
include_contentboolfalsedetailed mode only — fetch page text + highlights
glstringshorter mode only — country ISO (e.g. in, us)
hlstringshorter mode only — language ISO
tbsstringshorter 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.

json
{
  "query": "latest Indian AI startups raising funding",
  "mode": "shorter",
  "provider": "serper",
  "results": [
    {
      "title": "Sarvam AI raises $...",
      "url": "https://example.com/article",
      "snippet": "Sarvam 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 credits_used + balance fields on the response and in your /api/v1/credits/transactions history.
  • 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:

json
{ "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
Was this page helpful?