{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/fiatdock-com/json-schema/fiatdock-com-satellite-scenes-schema.json",
  "title": "SatelliteScenes",
  "description": "Paid. Latest satellite images of any point (Sentinel-2).",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/fiatdock-com-geo-api-openapi.yml#/components/schemas/SatelliteScenes",
  "type": "object",
  "properties": {
    "point": {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number"
        },
        "lon": {
          "type": "number"
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "description": "The point the scenes cover"
    },
    "collection": {
      "type": "string",
      "description": "The imagery collection (Sentinel-2 Level-2A)"
    },
    "filters": {
      "type": "object",
      "properties": {
        "maxCloudPct": {
          "type": "number"
        },
        "days": {
          "type": "number"
        }
      },
      "required": [
        "maxCloudPct",
        "days"
      ],
      "description": "The cloud limit and look-back window applied"
    },
    "matched": {
      "type": [
        "number",
        "null"
      ],
      "description": "Scenes the catalogue matched before the limit"
    },
    "count": {
      "type": "number",
      "description": "Scenes returned"
    },
    "scenes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "datetime": {
            "type": [
              "string",
              "null"
            ]
          },
          "cloudCoverPct": {
            "type": [
              "number",
              "null"
            ]
          },
          "platform": {
            "type": [
              "string",
              "null"
            ]
          },
          "mgrsTile": {
            "type": [
              "string",
              "null"
            ]
          },
          "sunElevationDeg": {
            "type": [
              "number",
              "null"
            ]
          },
          "gsdMeters": {
            "type": "number",
            "description": "Ground distance per pixel of the true-colour image, in metres"
          },
          "thumbnailUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "A small JPEG preview"
          },
          "visualUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "The full true-colour image (Cloud-Optimized GeoTIFF)"
          },
          "stacItemUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "datetime",
          "cloudCoverPct",
          "platform",
          "mgrsTile",
          "sunElevationDeg",
          "gsdMeters",
          "thumbnailUrl",
          "visualUrl",
          "stacItemUrl"
        ]
      },
      "description": "The scenes, newest first"
    },
    "attribution": {
      "type": "string",
      "description": "The attribution the Copernicus licence asks for — keep it beside any use of the images"
    },
    "source": {
      "type": "string",
      "description": "Where the data came from"
    },
    "asOf": {
      "type": "string",
      "description": "ISO time the catalogue was read"
    },
    "note": {
      "type": "string",
      "description": "How to use the image links, and their limits"
    },
    "defaulted": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "field",
        "to",
        "value",
        "note"
      ],
      "description": "Present only when the body was empty: which subject the answer is for, and why"
    }
  },
  "required": [
    "point",
    "collection",
    "filters",
    "matched",
    "count",
    "scenes",
    "attribution",
    "source",
    "asOf",
    "note"
  ]
}