Skip to main content
POST
Search
Search the web and return ranked results with URLs, titles, and descriptions. Part of the API reference, which covers the base URL, authentication, and the limits both endpoints share.

Without a key

POST /v1/search/public takes the same body and returns the same shape, with no API key:
X-Keenable-Title names your application and is required on the public endpoint; without it the request is rejected with 400 Missing app identifier. Keyless calls are rate limited per IP and consume no credits — see Authentication for the details. The playground on this page calls the keyed endpoint.

Request

string
required
The search query.
string
Restrict results to a specific site (e.g. "techcrunch.com").
string
Filter to pages acquired/indexed at or after this point in time. See Date and time filters for accepted formats.
string
Filter to pages acquired/indexed at or before this point in time. See Date and time filters for accepted formats.
string
Filter to pages published at or after this point in time. See Date and time filters for accepted formats.
string
Filter to pages published at or before this point in time. See Date and time filters for accepted formats.
string
Search the index as it stood at this point in time: pages acquired after it are excluded. Accepts a timestamp or a date (a date resolves to 00:00:00 UTC, not to the end of the day). Also re-bases relative deltas — see Point-in-time search.
integer
Maximum length, in characters, of the snippet returned per result. Must be between 180 and 10000. When omitted, a default snippet length is used.
integer
Maximum number of results to return. Must be between 1 and 50. When omitted, up to 10 results are returned.

Response

string
The query that was searched.
array
List of search results.

Example

Date and time filters

acquired_after, acquired_before, published_after, and published_before each accept one of the following formats:
  • Date in RFC 3339 full-date form (YYYY-MM-DD) — covers that whole day in UTC. On an _after bound it resolves to 00:00:00 on that date; on a _before bound it resolves to 23:59:59.999 on that date, so pages from the named day are kept at either end. Pass a timestamp instead to cut at an exact instant.
  • Timestamp in ISO 8601 form (YYYY-MM-DDTHH:MM:SS[.sss][±HH:MM]). When a timezone offset is not provided, the timezone is interpreted as UTC.
  • Relative delta (<number><unit>, e.g. 7d, 30min) — resolves to the request time minus the delta, truncated to minute precision, or to query_time minus the delta when that is set. Supported units: min (minutes), h (hours), d (days), mo (months), y (years).
Example values: Relative deltas may be combined with absolute values across the two bounds of a window:
For example, at request time 2026-05-18T14:23:45Z, acquired_after: "2h" resolves to 2026-05-18T12:23:00Z — a document acquired at 12:22:59Z is dropped, one acquired at 12:23:00Z is kept. Mind the difference between a date and a timestamp on a _before bound: acquired_before: "2026-05-01" keeps a page acquired at 2026-05-01T14:31:13Z, while acquired_before: "2026-05-01T00:00:00Z" drops it. Use the date form to mean “up to and including that day”, and the timestamp form to cut at midnight.