---
title: "Search the web (JSON body)"
method: POST
path: "/api/v1/search"
---

# Search the web (JSON body)

`POST /api/v1/search`

## Request

- Base URL: `https://api.andiai.com`
- URL: `https://api.andiai.com/api/v1/search`
- Auth: API key in header `x-api-key`

Same contract as `GET /api/v1/search`, but accepts parameters as a JSON body. Preferred for location-bearing requests because GET-style location encoding is awkward and keeps `latitude`/`longitude` out of HTTP access logs. All GET query parameters are accepted as body fields, plus optional location fields (`latitude`, `longitude`, `accuracy`, `city`, `state`, `countryCode`, `postalCode`, `timezone`, `location`).

## Request body

- object
  - `q` string, required: Search query string. Same semantics as the GET `q` parameter.
  - `limit` integer: Maximum number of results to return.
  - `offset` integer: Number of results to skip for pagination.
  - `searchMode` 'auto' | 'low-cost' | 'fast' | 'balanced' | 'deep' | 'exhaustive': Search effort control. `auto` (default) sets the effort per query automatically — simple lookups resolve fast, complex questions get deeper treatment. The fixed modes pin an effort level: `low-cost` caps the work done per request for budget-constrained callers. `fast` returns results in about 1.2 seconds. `balanced` is everyday web search, about 3–4 seconds. `deep` searches from multiple angles with spell correction, about 6.5 seconds. `exhaustive` is Andi's most thorough mode: more sources and more time, up to about 15 seconds; for a question with several parts or steps it searches each part. Deeper modes add query expansion, follow-up searches fanned out from initial results, and stronger reranking. Requests are billed on outcome-based pricing (see `metrics.cost_dollars`).
  - `effort` 'low' | 'medium' | 'high' | 'max': Thoroughness dial, independent of `searchMode`: `low` favors speed, `medium` is balanced, `high` searches from multiple angles with spell correction, `max` gives the most complete results and also searches each part of a question that has several parts or steps — the same tiers as pinning `searchMode` to `fast`, `balanced`, `deep`, and `exhaustive` respectively. An explicit `searchMode` always wins over `effort`. With the default `auto` mode, an explicit `effort` pins its equivalent mode. Omit for the adaptive default. Invalid values return a `400` listing the valid tiers.
  - `reranker` 'auto' | 'small' | 'medium' | 'large' | 'xl': Semantic reranker size hint. `small` is the lightest and fastest; `medium` and above apply stronger relevance scoring but need a deeper `searchMode` and may be clamped by the request's time and cost budget (for example, `xl` needs `deep` or `exhaustive`). `auto` (default) selects a tier automatically based on the query and search mode.
  - `intent` string: Force a specific search intent. When not set, the API auto-detects intent from the query. Accepts common aliases like `search`, `news`, `video`, `images`, `weather`, `wiki`, `code`, `recipe`, `place`, `time`, and others.
  - `format` 'json' | 'context': Response format. `json` returns a JSON object. `context` returns results as markdown text, suitable for passing to language models.
  - `metadata` 'basic' | 'full': Level of metadata to include. `basic` includes standard search metrics. `full` includes extended metadata with content type details and reader data on results.
  - `extracts` boolean: Include text extracts from result pages in the response. Defaults to `true` when `format=context`, `content=true` or `content=focused`; pass `extracts=false` to turn them off in those cases. Also returned by default with `metadata=full`.
  - `content` union: Include each result's full page text, in `reader.markdown` (or `reader.content` when the page has no markdown version). `true` returns the head of each page. `"focused"` returns the parts of each page that answer the query, in page order under section headings; it is billed and capped like `true` and falls back to the normal page text when no focused text can be built. Any other value is treated as `false`. Also turns on `extracts` unless `extracts=false` is passed. Adds time and cost; deeper modes allow more time.
    - boolean
    - 'true' | 'focused' | 'false'
  - `enrichContent` boolean: Deprecated alias of `content`.
  - `maxContentLength` integer: Maximum number of characters of page text to return per result. Only applies when `content` is true.
  - `timeout` integer: Target time in milliseconds for ranked results (1000–30000). It is a target, not a hard ceiling. Omit it for the mode's normal speed; a larger value (e.g. 30000) lets slower sources run longer, so deep/exhaustive searches can take close to that long. The search may run a little past it when it needs a moment more to return a useful page. Requested page text (`content`/`extracts`) is fetched afterward, on top of the target. Values below 1000 are raised to 1000; values above 30000 are lowered to 30000; 0, empty or non-numeric values are ignored. With `searchMode=auto` (the default), a timeout steps the resolved mode down to the richest one that fits it. An explicit `searchMode` is always honored.
  - `safe` 'off' | 'moderate' | 'strict': Safe search filtering level. `off` disables filtering, `moderate` filters most explicit content, `strict` applies maximum filtering.
  - `country` string: Two-letter ISO 3166-1 country code to localize results. When you name a country, its main languages also count as target languages for ranking and for `languageMode=strict`. It does not narrow what Andi retrieves.
  - `sourceCountry` string: Two-letter ISO 3166-1 country code to restrict results to sources from this country. Unlike `country`, which biases results by locale, `sourceCountry` excludes results from other countries.
  - `language` string: Language tag for the search, up to 13 characters. Accepts a primary language with optional region or script subtags, for example `en`, `de`, `zh-Hans` or `es-419`; matching uses the primary subtag. Omit it and Andi detects the query language. A language you state is used for language filtering, ranking, reranking and page retrieval. The `lang:` query operator takes precedence. The language Andi used is returned in `locale`.
  - `languageMode` 'prefer' | 'strict': How strictly to hold results to the target languages. `prefer` ranks pages in the query language first. `strict` also drops pages whose known language is neither a target language nor English; pages with an unknown language are kept. It changes the response only, never what is cached. Target languages are the query language plus, when you name a `country`, that country's main languages.
  - `units` 'metric' | 'imperial': Unit system for weather and calculation results. Defaults based on the `country` parameter — `imperial` for `US`, `metric` for all other countries.
  - `noCache` boolean: Bypass cached results and fetch fresh data.
  - `dateRange` 'day' | 'week' | 'month' | 'year' | '24h' | '7d' | '30d' | '90d' | '1y': Relative date range filter for results.
  - `dateFrom` string, date: Filter results published on or after this date. Format: `YYYY-MM-DD`.
  - `dateTo` string, date: Filter results published on or before this date. Format: `YYYY-MM-DD`.
  - `includeDomains` string: Comma-separated list of domains to restrict results to. Supports wildcards (`*.example.com`).
  - `excludeDomains` string: Comma-separated list of domains to exclude from results. Supports wildcards.
  - `includeTerms` string: Comma-separated terms that must appear in results.
  - `excludeTerms` string: Comma-separated terms to exclude from results.
  - `parseOperators` boolean: Parse query operators (like `site:`, `filetype:`, `intitle:`) from the query string. When disabled, the query is treated as literal text.
  - `linkFormat` 'link' | 'url': Field name for result URLs. Use `url` to receive the URL field as `url` instead of the default `link`. Only affects the `/search` endpoint.
  - `imageFormat` 'short' | 'long': Field naming for image results. `long` (default) uses full field names. `short` uses abbreviated field names.
  - `filetype` string: Filter results by file type.
  - `intitle` string: Filter results to pages with this term in the title.
  - `inurl` string: Filter results to pages with this term in the URL.
  - `intext` string: Filter results to pages with this term in the body text.
  - `latitude` number: Latitude in decimal degrees. Sent in the body to keep coordinates out of HTTP access logs.
  - `longitude` number: Longitude in decimal degrees.
  - `accuracy` number: Location accuracy in meters.
  - `city` string: City name for location-aware queries.
  - `state` string: State or region name.
  - `countryCode` string: Two-letter ISO 3166-1 country code for the caller's location.
  - `postalCode` string: Postal or ZIP code.
  - `timezone` string: IANA timezone, for example America/Los_Angeles.
  - `location` string: Display name for the caller's location, for example "San Francisco, CA".

## Response `200`

Search results. JSON by default; LLM-ready markdown with YAML frontmatter when `format=context`.

- SearchResponse
  - `results_type` string, required: The type of results returned (e.g., `Search`, `News`, `Weather`, `Calculator`). Determines which optional response sections are present.
  - `answer` string, required: Instant answer for the query when one is found — for example a definition, a weather line or a calculation — otherwise an empty string. On news feeds, a short summary of the headlines when available.
  - `type` string, required: Same as `results_type`. Indicates the category of results.
  - `title` string, required: Your query text (for a news feed, the feed's description).
  - `results` SearchResult[], required: Array of search results.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `metrics` Metrics, required: Search performance metrics. Always included in the response.
    - `query` string: The query as processed.
    - `intent` string: The detected or forced search intent.
    - `timestamp` string: Timestamp of the search request.
    - `duration` number: Total request duration in milliseconds.
    - `queries_executed` integer: Number of search queries executed.
    - `api_requests_count` integer: Number of queries in your request (the same as `queries_executed`).
    - `results_returned` integer: Number of results returned in this response.
    - `total_results_found` integer: Rough estimate of matching pages, as reported by sources (0 for news feeds).
    - `queries_provided` integer: Number of queries you sent. Only present when more than 5 were sent.
    - `queries_truncated` integer: How many queries were dropped because only the first 5 run. Only present when more than 5 were sent.
    - `cached` boolean: Whether the response was served from cache. Only present on cache hits.
    - `cache_age_seconds` integer: Age of the cached response in seconds. Only present on cache hits.
    - `cost_dollars` number: Amount charged to your account for this request in USD, after any discounts. Pricing is outcome-based — each request is charged for the work performed and the content delivered, whether the effort was set automatically (`auto`) or pinned with a fixed mode.
    - `effort` 'low' | 'medium' | 'high' | 'max': Resolved effort tier for this request — the tier `auto` mode selected, or the one pinned via `searchMode`/`effort`.
    - `response_time_ms` integer: Total server response time in milliseconds.
  - `correctedQuery` string: Spell-corrected query. Present when a misspelling in the original query is detected and corrected — any mode can return it; deep and exhaustive modes run the strongest spell correction.
  - `related_searches` string[]: Related search suggestions. Present on some queries.
  - `topics` string[]: Related topics. Present on some queries.
  - `related_topics` string[]: Related topic names for entity answers.
  - `infobox` object: Facts panel for an entity answer.
    - `heading` string
    - `source` string
    - `items` object[]
      - `label` string
      - `value` string
  - `disambiguation` object: Possible meanings when the query is ambiguous.
    - `query` string
    - `message` string
    - `options` object[]
      - `title` string
      - `text` string
      - `url` string, uri
  - `aiSummary` object: A pre-written news summary. News feeds return it, and so does search when the query asks for a whole feed (for example "latest technology news" or "hacker news"), but not for a topic inside a feed ("nfl news"). On news feeds the same text is in `answer`; on search, `answer` can hold something else, such as a description of the site.
    - `text` string: The summary, as markdown.
    - `generatedAt` string, date-time: When the summary was written.
    - `model` string: A short label for the summary's source.
    - `mode` 'pregen': `pregen` means the summary was written ahead of your request.
  - `locale` object: The language and country Andi searched for. Present on every search response (not on news feeds). With `format=context`, the same values appear in the frontmatter as `language`, `language_confidence`, `language_source`, `country` and `local_scope`.
    - `language` string, required: ISO 639-1 code of the query language, or `und` when unknown.
    - `languageConfidence` number, required: Confidence in `language`, from 0 to 1.
    - `languageSource` 'param' | 'script' | 'jev' | 'none', required: Where `language` came from: `param` (you stated it), `script` (the query's writing system named it), `jev` (detected from the words), or `none`.
    - `country` string: ISO 3166-1 country code the search was scoped to. Left out when unknown.
    - `localScope` 'global' | 'country' | 'city': How much the answer depends on the searcher's place. Left out when not judged.
  - `safeSearch` object: Echo of the safe-search state. Present on cache misses. Use it to confirm your `safe` parameter was honored.
    - `requested` 'off' | 'moderate' | 'strict'
    - `applied` 'off' | 'moderate' | 'strict'
  - `videos` SearchResult[]: Video results, when the search found any.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `images` ImageResult[]: Image results, when the search found any.
    - `title` string, required: Image title or alt text.
    - `link` string, uri, required: URL of the page containing the image.
    - `image` string, uri, required: Direct URL of the full-size image.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'image', required: Always `image`.
    - `thumbnail` string, uri: Thumbnail URL.
    - `width` string: Image width in pixels (as a string).
    - `height` string: Image height in pixels (as a string).
  - `news` SearchResult[]: News stories, when the search found any. Front pages, section pages, topic pages and listing pages are in `categories`, not here.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `citations` SearchResult[]: Rows an answer cites, in the same shape as `results`. When a search names a whole curated news feed (for example "headlines" or "latest news from hacker news") and the response carries the feed's `aiSummary`, this lists the stories the summary cites in the summary's order, then the feed's other stories, up to `limit`. Left out when empty. Not on `/api/v1/news`.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `categories` SearchResult[]: News front pages, section pages, topic or tag pages, listing pages and site-search pages. `results` still holds them too. Left out when empty. Not on `/api/v1/news`.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `places` SearchResult[]: Place and business results, when the search found any.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `profiles` SearchResult[]: People and entity profiles, when the search found any.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `social` SearchResult[]: Social posts, when the search found any.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `academic` SearchResult[]: Scholarly papers, when the search found any.
    - `title` string, required: Page title.
    - `link` string, uri, required: Page URL.
    - `desc` string, required: Page description or summary.
    - `source` string, required: Site or publisher name (for example `Wikipedia`); a name derived from the domain when none is known.
    - `type` 'website' | 'blog' | 'news' | 'video' | 'image' | 'place' | 'profile' | 'social' | 'academic' | 'calculation' | 'weather' | 'computation' | 'instant answer': Result type. Only included when `metadata=full`.
    - `date` string: Publication date of the content, when available.
    - `dateModified` string: When the page was last updated, if known.
    - `image` string, uri: Preview image URL, when available. Only included when `metadata=full`.
    - `snippet` string: Query-relevant text excerpt from the page. Distinct from `desc`, which is the general page description.
    - `answer` string: Inline answer for instant answer results.
    - `extracts` string[]: Query-relevant passages from the page. Returned with `extracts=true`, and by default with `format=context`, `content=true` and `metadata=full`.
    - `contentType` string: Content type of the page. Only included when `metadata=full`.
    - `reader` object: Extracted page content and metadata. Included with `metadata=full`; with `content=true` it holds the full page text in `reader.markdown` (or `reader.content`) at any metadata level.
    - `contentSafety` object: Safety classification. Only included when `metadata=full`.
      - `rating` 'safe' | 'unsafe' | 'unknown': Content safety rating.
      - `safeSearchApplied` boolean: Whether safe-search filtering was applied to this result.
    - `bang` string: Bang shortcut for the result domain. Only included when `metadata=full`.
    - `queryIndices` integer[]: Multi-query only: which of your queries (0-based) found this result.
    - `language` string: The page's language as a lower-case primary tag, for example `fr`. Left out when unknown.
    - `site_country` string: ISO 3166-1 country code named by the site's country-code domain, for example `DE` for `.de`. Generic domains such as `.com` have none.
    - `seeAlso` object[]: News feeds only: other outlets covering the same story.
      - `title` string
      - `url` string, uri
      - `source` string
  - `weather` WeatherResult
    - `location` object, required: Location details.
      - `name` string: Location name.
      - `country` string: Country name or code.
      - `coordinates` object
        - `latitude` number
        - `longitude` number
    - `temperature` number, required: Current temperature.
    - `feelsLike` number: Feels-like temperature.
    - `units` 'metric' | 'imperial', required: Unit system: `metric` or `imperial`.
    - `description` string, required: Weather condition description.
    - `humidity` number: Humidity percentage.
    - `windSpeed` number: Wind speed.
    - `windDirection` number: Wind direction in degrees.
    - `pressure` number: Atmospheric pressure.
    - `icon` string: Weather icon identifier.
    - `cloudiness` number: Cloud cover percentage.
    - `visibility` number: Visibility distance.
    - `timestamp` integer: Time of the reading, Unix epoch milliseconds.
  - `calculation` CalculationResult
    - `expression` string, required: The mathematical expression.
    - `result` string, required: The calculated result.
    - `rawResult` unknown

## Other responses

- `400`: Bad request — missing or invalid parameters
- `401`: Unauthorized — missing or invalid API key
- `402`: Insufficient credits — account balance depleted
- `429`: Rate limit exceeded
- `500`: Internal server error

## Changes

- **2026-11-01** `fcda359bd8c6`: 1 warning, 21 info
  - the `language` request property's maxLength was set to `13`
  - added the new optional request property `languageMode`
  - the `language` request property default value `en` was removed
  - added the optional property `academic/items/language` to the response with the `200` status
  - …18 more
- **2026-11-01** `44266783bfc1`: 2 info
  - added the optional property `categories` to the response with the `200` status
  - added the optional property `citations` to the response with the `200` status
- **2026-10-29** `0f394ac8b1bb`: 1 info
  - request property `content` list-of-types was widened by adding types `string` to media type `application/json`
- **2026-09-29** `7b56c4c1c3ea`: 1 breaking, 1 warning, 31 info
  - the `weather/timestamp` response's property type changed from `string` to `integer` for status `200`
  - removed the optional property `metrics/timing` from the response with the `200` status
  - added the new optional request property `content`
  - request property `enrichContent` deprecated
  - …29 more
- **2026-09-28** `20763bfc7ec3`: 2 info
  - added the new optional request property `timeout`
  - added the optional property `metrics/timing` to the response with the `200` status

[Operation history](https://skmtc.dev/andiai/apis/andi-ai-search-api/changes/api/v1/search/post.md)

---

[API](https://skmtc.dev/andiai/apis/andi-ai-search-api.md) - [All operations](https://skmtc.dev/andiai/apis/andi-ai-search-api/llms.txt) - [OpenAPI document](https://skmtc.dev/andiai/apis/andi-ai-search-api/revisions/fcda359bd8c6?raw)
