{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/blacksky/json-schema/blacksky-search-request-dto-schema.json",
  "title": "SearchRequestDto",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/blacksky-catalog-api-openapi.yml#/components/schemas/SearchRequestDto",
  "type": "object",
  "properties": {
    "collections": {
      "uniqueItems": true,
      "type": [
        "array",
        "null"
      ],
      "description": "The names of the collections whose full scenes you want to include in search results.\n",
      "items": {
        "type": "string"
      }
    },
    "ids": {
      "uniqueItems": true,
      "type": [
        "array",
        "null"
      ],
      "description": "The IDs of specific full scenes you want to include in search results.\n",
      "items": {
        "type": "string"
      }
    },
    "datetime": {
      "type": [
        "string",
        "null"
      ],
      "description": "Search for full scenes that have a temporal property that intersects the datetime value in the RFC 3339 format. You can search for a specific date and time, or for a closed or an open date interval. Express open intervals using double-dots.\n\n- A timestamp: `2025-02-12T23:20:50Z`\n- A closed interval: `2025-02-12T00:00:00Z/2025-03-18T12:31:12Z`\n- An interval without end date: `2025-02-12T00:00:00Z/..`\n- An interval without start date: `../2025-03-18T12:31:12Z`\n"
    },
    "limit": {
      "maximum": 500,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ],
      "description": "The number of full scenes on a results page.\n",
      "format": "int32"
    },
    "query": {
      "$ref": "#/$defs/CatalogStacQuery"
    },
    "bbox": {
      "maxItems": 4,
      "minItems": 4,
      "type": [
        "array",
        "null"
      ],
      "description": "A search geometry in the GeoJSON format. Returns images that intersect with the defined rectangle and may not fully cover it. Use only if `intersects` isn't specified.\n",
      "items": {
        "type": "number",
        "format": "double"
      }
    },
    "intersects": {
      "$ref": "#/$defs/Polygon"
    }
  },
  "$defs": {
    "CatalogStacQuery": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "cloudCoverage": {
          "maxProperties": 1,
          "minProperties": 1,
          "type": "object",
          "properties": {
            "GT": {
              "type": "integer",
              "description": "Greater than"
            },
            "GTE": {
              "type": "integer",
              "description": "Greater than or equal to"
            },
            "LT": {
              "type": "integer",
              "description": "Less than"
            },
            "LTE": {
              "type": "integer",
              "description": "Less than or equal to"
            }
          },
          "additionalProperties": false,
          "description": "Search by the percentage of cloud coverage. The format is `<operator>: <integer>`. Replace `<operator>` with a comparison operator:\n\n- `GT`: greater than\n- `GTE`: greater than or equal to\n- `LT`: less than\n- `LTE`: less than or equal to\n"
        }
      },
      "description": "A STAC query object.\n"
    },
    "Polygon": {
      "required": [
        "coordinates",
        "type"
      ],
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of geometry. The only allowed value is `Polygon`.",
          "enum": [
            "Polygon"
          ]
        },
        "coordinates": {
          "type": "array",
          "description": "The coordinates.",
          "items": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "number",
                "format": "double"
              }
            }
          }
        }
      },
      "description": "A polygon in the GeoJSON format.\n"
    }
  }
}