{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/keenable/main/json-schema/keenable-search-request-schema.json",
  "title": "SearchRequest",
  "x-generated": "2026-10-24",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/keenable-openapi.json#/components/schemas/SearchRequest",
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query"
    },
    "mode": {
      "$ref": "#/$defs/SearchMode"
    },
    "acquired_after": {
      "type": "string",
      "description": "Filter: pages acquired after this date (YYYY-MM-DD, ISO 8601, or relative like \"7d\")"
    },
    "acquired_before": {
      "type": "string",
      "description": "Filter: pages acquired before this date. A bare YYYY-MM-DD includes that whole day (up to 23:59:59.999 UTC); pass a timestamp to cut at an exact instant"
    },
    "published_after": {
      "type": "string",
      "description": "Filter: pages published after this date"
    },
    "published_before": {
      "type": "string",
      "description": "Filter: pages published before this date. A bare YYYY-MM-DD includes that whole day (up to 23:59:59.999 UTC); pass a timestamp to cut at an exact instant"
    },
    "site": {
      "type": "string",
      "description": "Restrict results to a specific domain"
    },
    "query_time": {
      "type": "string",
      "description": "Search the index as it stood at this point in time: pages acquired after it are excluded. A bare YYYY-MM-DD resolves to 00:00:00 UTC. Relative deltas on the date filters are computed from this instant instead of the request time"
    },
    "snippet_max_length": {
      "type": "integer",
      "minimum": 180,
      "maximum": 10000,
      "description": "Maximum length, in characters, of the snippet returned per result. When omitted, a default snippet length is used."
    },
    "max_results": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Maximum number of results to return. When omitted, up to 10 results are returned."
    }
  },
  "$defs": {
    "SearchMode": {
      "type": "string",
      "enum": [
        "realtime",
        "pro"
      ],
      "default": "pro",
      "description": "\"pro\" (default) for deeper retrieval, \"realtime\" for fast results"
    }
  }
}