Skip to content

STAC Item Validation Rules – Axis 3 Compliant

Applies To: All Axis 3 Governmental Hub Thematic Services (e.g., Flood, Wildfire, Agriculture, Forest, Safety & Security)


Overview

This document defines the required STAC Item structure and validation rules for all products generated under the Axis 3 Governmental Hub, across all thematic services.

Ensures all EO products are: - Properly indexed and searchable in the Axis 3 Catalog
- Discoverable and renderable by EOEPCA and STAC-compliant clients
- Consistent across all thematic service outputs

Example product types: - Raster: binary flood masks, NDVI layers, risk maps
- Vector: flooded areas, fire perimeters, crop boundaries
- Thumbnails: previews for visualization


1. Top-Level Fields – STAC Item Root

Field Requirement Description
type ✅ Required Must be "Feature"
id ✅ Required Unique ID (e.g., SS-FR-FD-A)
🟥 Must follow [STAC Item ID and Naming Convention – Axis 3]
stac_version ✅ Required Must be "1.1.0"
stac_extensions 🟡 Essential for Axis 3 Catalog Required if any extension fields are used (see Section 5)
geometry ✅ Required GeoJSON Polygon/MultiPolygon in EPSG:4326
bbox ✅ Required Bounding box matching geometry
properties ✅ Required See Section 2
assets ✅ Required See Section 3
links ✅ Required See Section 4
collection ✅ Required Must match relevant collection (e.g., SS-FR, SS-WF)

2. properties Object – Metadata Fields

Field Requirement Description
datetime ✅ Required UTC observation or analysis timestamp
created 🟡 Essential for Axis 3 Catalog Product creation time
processing:datetime 🟡 Essential for Axis 3 Catalog Processing completion timestamp
processing:facility 🟡 Essential for Axis 3 Catalog Name of the processing system
processing:version 🟡 Essential for Axis 3 Catalog Processing chain version
processing:software 🟡 Essential for Axis 3 Catalog Dictionary of processing software
processing:level 🟡 Essential for Axis 3 Catalog E.g., L4
gsd 🟡 Essential for Axis 3 Catalog Ground Sampling Distance
platform 🟡 Essential for Axis 3 Catalog Sensor/platform (e.g., sentinel-2a)
proj:code 🟡 Essential for Axis 3 Catalog EPSG code if projection used
proj:centroid 🟡 Essential for Axis 3 Catalog { lat, lon } centroid of AOI
title 🟡 Essential for Axis 3 Catalog Human-readable title
🟥 Must follow [STAC Item ID and Naming Convention – Axis 3]
description 🟡 Essential for Axis 3 Catalog Summary of product
keywords 🟡 Essential for Axis 3 Catalog E.g., ["flood", "wildfire"]

3. assets Object – Thematic Products

Each STAC Item must include: - Primary product(s): Raster or vector (e.g., flood_extent, fire_risk) - A thumbnail: JPEG visualization preview

Field Requirement Description
<main_product> ✅ Required E.g., flood_extent, fire_risk
thumbnail ✅ Required JPEG preview (auto-generated from raster)

thumbnail is auto-generated by applying colormap to main raster and should also appear in links with "rel": "preview".

Per asset fields:

Field Requirement Description
href ✅ Required Path or URL to the file
type ✅ Required MIME type (e.g., image/tiff, application/geo+json)
roles ✅ Required E.g., ["data"], ["thumbnail"]
title 🟡 Essential for Axis 3 Catalog Human-readable name
description 🟡 Essential for Axis 3 Catalog What the product contains
raster:bands 🟡 Essential for Axis 3 Catalog Required if raster
proj:* fields ✅ Required Required if raster

rel value Requirement Description
self ✅ Required Link to this STAC item JSON
collection ✅ Required Link to the STAC Collection
preview ✅ Required Link to thumbnail image
root, parent 🟡 Essential for Axis 3 Catalog Optional links to catalog hierarchy
license 🟡 Essential for Axis 3 Catalog License or metadata PDF

All links must include: - rel: e.g., "self", "preview" - href: full path or URL
- type: e.g., application/json, image/jpeg


5. stac_extensions – Required for Axis 3 EO Products

Declare extensions only if the associated fields are used.

Extension Name Requirement Description
raster 🟡 Essential for Axis 3 Catalog Needed if raster:bands present
projection 🟡 Essential for Axis 3 Catalog Needed if using proj:* fields
processing 🟡 Essential for Axis 3 Catalog Needed for all processing:* fields
"stac_extensions": [
  "https://stac-extensions.github.io/raster/v1.1.0/schema.json",
  "https://stac-extensions.github.io/projection/v2.0.0/schema.json",
  "https://stac-extensions.github.io/processing/v1.2.0/schema.json"
]

Note:
Extension usage depends on the Axis 3 service process and the product type (e.g., flood delineation vs depth estimation).
Only declare extensions if their fields are used.


Universal STAC Item Schema – Axis 3 Governmental Hub

This structure must be respected by all thematic services (e.g., Flood, Wildfire, Target Detection) to ensure compatibility with the Axis 3 Catalog and EOEPCA-based service orchestration.

Top-Level STAC Item Fields

STAC Item (type: "Feature")
├── stac_version: "1.1.0"
├── id: "<unique STAC ID>"  ← For UID Must follow **[STAC Item ID and Naming Convention – Axis 3]** 
├── geometry: { ... }        ← Polygon/MultiPolygon (EPSG:4326)
├── bbox: [minLon, minLat, maxLon, maxLat] ← Matches geometry
├── collection: "<collection ID>"  ← E.g., "SS-FR", "SS-WF", "SS-AG"
├── stac_extensions: [ ... ]
│   ├── raster (if raster:bands used)
│   ├── projection (if proj:* used)
│   └── processing (if processing:* used)


Metadata – properties Object

dproperties:
├── datetime: "<ISO8601 timestamp>"         ← Observation or analysis time
├── created: "<timestamp>"                 ← Product creation time
├── title: "<Human-readable title>"        ← for proper Title name Must follow **[STAC Item ID and Naming Convention – Axis 3]** 
├── product:id                             ← If multiple assets there are  
├── description: "<Short description>"     ← What the product shows
├── keywords: [ ... ]                      ← Tags like ["flood", "wildfire"]
├── gsd: <number>                          ← Ground Sampling Distance
├── platform: "<satellite/sensor list>"    ← E.g., "sentinel-2a"
├── processing:datetime                    ← Time processing finished
├── processing:facility                    ← System name
├── processing:version                     ← Service version
├── processing:software                    ← Dictionary of tools/versions
├── processing:level                       ← E.g., "L4"
├── proj:code                              ← EPSG code (e.g., 2100)
├── proj:centroid: { lat, lon }            ← Geometric center of AOI

Data – assets Object

assets:
├── Binary:     ← Binary classification GeoTIFF
├── Raster:      ← Estimated GeoTIFF
├── Vector:    ← Vector GeoJSON
├── thumbnail:        ← for each asset png preview (512x512 based on the produced porduct)
Each asset includes:
  ├── href: "<link to file>"
  ├── type: "<MIME type>" ← e.g. image/tiff, application/geo+json
  ├── roles: [ "data" | "thumbnail" ]
  ├── title, description (optional)
  ├── raster:bands (if raster)
  ├── proj:shape, proj:bbox, proj:transform (if raster)

links:
├── self: "<link to this STAC item>"
├── collection: "<link to STAC collection>"
├── preview: "<optional link to thumbnail>"
├── root/parent: "<optional catalog parent>"
├── license: "<link to license or metadata PDF>"

Notes for Thematic Services

The structure above is universal for all thematic services in Axis 3.

Depending on the service (Flood, Wildfire, Target Detection...), the assets will change, but the rest of the structure (e.g., properties, extensions) must be respected.

STAC extensions should only be declared if their fields are used in assets or properties.

Example of an indexed item to Catalog

{
    "type": "Feature",
    "stac_version": "1.1.0",
    "stac_extensions": [
        "https://stac-extensions.github.io/raster/v1.1.0/schema.json",
        "https://stac-extensions.github.io/projection/v2.0.0/schema.json",
        "https://stac-extensions.github.io/processing/v1.2.0/schema.json"
    ],
    "id": "SS-FR-FD-A",
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [
                    22.35462484229228,
                    39.40909226100256
                ],
                [
                    22.91092288170982,
                    39.40909226100256
                ],
                [
                    22.91092288170982,
                    39.86501984634571
                ],
                [
                    22.35462484229228,
                    39.86501984634571
                ],
                [
                    22.35462484229228,
                    39.40909226100256
                ]
            ]
        ]
    },
    "bbox": [
        22.354625,
        39.409092,
        22.910923,
        39.86502
    ],
    "properties": {
        "created": "2025-07-28T08:59:28.170653Z",
        "processing:facility": "GR Service Engine",
        "processing:version": "v1.1.0",
        "processing:software": {
            "GR Service Engine": "v1.1.0"
        },
        "processing:level": "L4",
        "processing:datetime": "2025-07-28T08:59:23.099511Z",
        "keywords": [
            "SS-FR-FD-A-BI",
            "SS-FR-FD-A-PL",
            "SS-FR-FD-A-RAS"
        ],
        "title": "Detailed flood delineation map (single class representing flood extent) and water depth map (water depth estimation), for 2015-2024.",
        "description": "Binary map showing water and non-water areas.",
        "gsd": 10,
        "platform": "sentinel-1, sentinel-2a",
        "proj:code": "2100",
        "proj:centroid": {
            "lat": 39.63706,
            "lon": 22.63277
        },
        "datetime": "2025-07-28T08:59:23.099485Z"
    },
    "links": [
        {
            "rel": "license",
            "href": "https://eks-1-hub.s3.eu-central-1.amazonaws.com/stac/CEOS_ARD/HUB_Pipeline_Execution_Flow.pdf",
            "title": "GR Service Engine"
        },
        {
            "rel": "root",
            "href": "/XeXuKq/items/catalog.json",
            "type": "application/json",
            "title": "Catalog with AXIS data"
        },
        {
            "rel": "parent",
            "href": "/XeXuKq/items/SS-FR/collection.json",
            "type": "application/json",
            "title": "Collection SS-FR"
        },
        {
            "rel": "self",
            "href": "/XeXuKq/items/SS-FR/SS-FR-FD-A/SS-FR-FD-A.json",
            "type": "application/json"
        },
        {
            "rel": "collection",
            "href": "/XeXuKq/items/SS-FR/collection.json",
            "type": "application/json",
            "title": "Collection SS-FR"
        }
    ],
    "assets": {
        "flood_extent": {
            "href": "assets/SS-FR/SS-FR-FD-A/flood_extent.tif",
            "type": "image/tiff; application=geotiff; profile=cloud-optimized",
            "title": "flood_extent",
            "description": "Binary Classification image water vs non water areas.",
            "product:id": "SS-FR-FD-A-BI",
            "raster:bands": [
                {
                    "nodata": 0.0,
                    "data_type": "uint8",
                    "spatial_resolution": 9.999343834414008
                }
            ],
            "proj:shape": [
                5131,
                4849
            ],
            "proj:bbox": [
                358209.30954257003,
                4362464.12000209,
                406696.1277956435,
                4413770.753216469
            ],
            "proj:transform": [
                9.999343834414008,
                0.0,
                358209.30954257003,
                0.0,
                -9.999343834414008,
                4413770.753216469,
                0.0,
                0.0,
                1.0
            ],
            "roles": [
                "data"
            ]
        },
        "flood_depth": {
            "href": "assets/SS-FR/SS-FR-FD-A/flood_depth.tif",
            "type": "image/tiff; application=geotiff; profile=cloud-optimized",
            "title": "flood_depth",
            "description": "Estimated water depth using DEM and SAR data fusion.",
            "product:id": "SS-FR-FD-A-RAS",
            "raster:bands": [
                {
                    "nodata": 0.0,
                    "data_type": "uint16",
                    "spatial_resolution": 9.999343834414008
                }
            ],
            "proj:shape": [
                5131,
                4849
            ],
            "proj:bbox": [
                358209.30954257003,
                4362464.12000209,
                406696.1277956435,
                4413770.753216469
            ],
            "proj:transform": [
                9.999343834414008,
                0.0,
                358209.30954257003,
                0.0,
                -9.999343834414008,
                4413770.753216469,
                0.0,
                0.0,
                1.0
            ],
            "roles": [
                "data"
            ]
        },
        "flooded_areas": {
            "href": "assets/SS-FR/SS-FR-FD-A/flooded_areas.geojson",
            "type": "application/geo+json",
            "title": "flooded_areas",
            "description": "File containing metadata or vector data",
            "roles": [
                "data"
            ]
        },
        "thumbnail": {
            "href": "assets/SS-FR/SS-FR-FD-A/thumbnail.jpg",
            "type": "image/jpeg",
            "title": "thumbnail",
            "description": "An averaged, preview image of the scene",
            "roles": [
                "thumbnail"
            ]
        }
    },
    "collection": "SS-FR"
}