{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/openeo/main/json-schema/openeo-collection-schema.json", "title": "Collection", "x-generated": "2026-10-09", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/openeo-openapi.yml#/components/schemas/collection", "type": "object", "required": [ "stac_version", "id", "description", "license", "extent", "links" ], "properties": { "stac_version": { "$ref": "#/$defs/stac_version" }, "stac_extensions": { "$ref": "#/$defs/stac_extensions" }, "type": { "type": "string", "enum": [ "Collection" ], "description": "For STAC versions >= 1.0.0-rc.1 this field is required." }, "id": { "$ref": "#/$defs/collection_id" }, "title": { "type": "string", "description": "A short descriptive one-line title for the collection." }, "description": { "type": "string", "format": "commonmark", "description": "Detailed multi-line description to explain the collection.\n\n[CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation." }, "keywords": { "type": "array", "description": "List of keywords describing the collection.", "items": { "type": "string" } }, "version": { "type": "string", "description": "Version of the collection.\n\nThis property REQUIRES to add `version` (STAC < 1.0.0-rc.1) or\n`https://stac-extensions.github.io/version/v1.2.0/schema.json` (STAC >= 1.0.0-rc.1)\nto the list of `stac_extensions`." }, "deprecated": { "type": "boolean", "default": false, "description": "Specifies that the collection is deprecated with the potential to\nbe removed. It should be transitioned out of usage as soon as\npossible and users should refrain from using it in new projects.\n\nA link with relation type `latest-version` SHOULD be added to the\nlinks and MUST refer to the collection that can be used instead.\n\nThis property REQUIRES to add `version` (STAC < 1.0.0-rc.1) or\n`https://stac-extensions.github.io/version/v1.2.0/schema.json` (STAC >= 1.0.0-rc.1)\nto the list of `stac_extensions`." }, "license": { "$ref": "#/$defs/stac_license" }, "providers": { "$ref": "#/$defs/stac_providers" }, "extent": { "type": "object", "title": "Collection Extent", "description": "The extent of the data in the collection. Additional members MAY\nbe added to represent other extents, for example, thermal or\npressure ranges.\n\nThe first item in the array always describes the overall extent of\nthe data. All subsequent items describe more preciseextents,\ne.g. to identify clusters of data.\nClients only interested in the overall extent will only need to\naccess the first item in each array.", "required": [ "spatial", "temporal" ], "properties": { "spatial": { "title": "Collection Spatial Extent", "description": "The *potential* spatial extents of the features in the collection.", "type": "object", "properties": { "bbox": { "description": "One or more bounding boxes that describe the spatial extent\nof the dataset.\n\nThe first bounding box describes the overall spatial extent\nof the data. All subsequent bounding boxes describe more\nprecise bounding boxes, e.g. to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/bbox" } } } }, "temporal": { "title": "Collection Temporal Extent", "description": "The *potential* temporal extents of the features in the collection.", "type": "object", "properties": { "interval": { "description": "One or more time intervals that describe the temporal extent\nof the dataset.\n\nThe first time interval describes the overall temporal extent\nof the data. All subsequent time intervals describe more\nprecise time intervals, e.g. to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", "type": "array", "minItems": 1, "items": { "description": "Begin and end times of the time interval. The coordinate\nreference system is the Gregorian calendar.\n\nThe value `null` is supported and indicates an open time\ninterval.", "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": [ "string", "null" ], "format": "date-time" } } } } } } }, "links": { "description": "Links related to this collection.\nCould reference to licensing information, other meta data formats with\nadditional information or a preview image.\n\nProviding links with the following `rel` (relation) types is RECOMMENDED:\n\n1. `root` and `parent`: URL to the data discovery endpoint at `/collections`.\n\n2. `license`: A link to the license(s) SHOULD be specified if the `license`\nfield is set to `proprietary` or `various`.\n\n3. `example`: Links to examples of processes that use this collection.\n\n4. `latest-version`: If a collection has been marked as deprecated, a link SHOULD\npoint to the latest version of the collection. The relation types `predecessor-version`\n(link to older version) and `successor-version` (link to newer version) can also be used\nto show the relation between versions.\n\n5. `alternate`: An alternative representation of the collection.\nFor example, this could be the collection available through another\ncatalog service such as OGC CSW, a human-readable HTML version or a\nmetadata document following another standard such as ISO 19115 or DCAT.\n\n6. `http://www.opengis.net/def/rel/ogc/1.0/queryables`: URL to the\nqueryables endpoint at `/collections/{collection_id}/queryables`.\nFor JSON Schema documents, the `type` field must be set to `application/schema+json`.\n\nFor additional relation types see also the lists of\n[common relation types in openEO](#section/API-Principles/Web-Linking)\nand the STAC specification for Collections.", "type": "array", "items": { "$ref": "#/$defs/link" } }, "cube:dimensions": { "title": "STAC Collection Cube Dimensions", "description": "The named default dimensions of the data cube.\nNames must be unique per collection.\n\nThe keys of the object are the dimension names. For\ninteroperability, it is RECOMMENDED to use the\nfollowing dimension names if there is only a single\ndimension with the specified criteria:\n\n* `x` for the dimension of type `spatial` with the axis set to `x`\n* `y` for the dimension of type `spatial` with the axis set to `y`\n* `z` for the dimension of type `spatial` with the axis set to `z`\n* `t` for the dimension of type `temporal`\n* `bands` for dimensions of type `bands`\n* `geometry` for dimensions of type `geometry`\n\nThis property REQUIRES to add a version of the data cube extension to the list\nof `stac_extensions`, e.g. `https://stac-extensions.github.io/datacube/v2.2.0/schema.json`.", "type": "object", "additionalProperties": { "x-additionalPropertiesName": "Dimension Name", "allOf": [ { "$ref": "#/$defs/dimension" } ] } }, "summaries": { "title": "STAC Summaries (Collection Properties)", "description": "Collection properties from STAC extensions (e.g. EO,\nSAR, Satellite or Scientific) or even custom extensions.\n\nSummaries are either a unique set of all available\nvalues, statistics *or* a JSON Schema. Statistics only\nspecify the range (minimum and maximum values) by default,\nbut can optionally be accompanied by additional\nstatistical values. The range can specify the\npotential range of values, but it is recommended to be\nas precise as possible. The set of values MUST contain\nat least one element and it is strongly RECOMMENDED to\nlist all values. It is recommended to list as many\nproperties as reasonable so that consumers get a full\noverview of the Collection. Properties that are\ncovered by the Collection specification (e.g.\n`providers` and `license`) SHOULD NOT be repeated in the\nsummaries.\n\nPotential fields for the summaries can be found here:\n\n* **[STAC Common Metadata](https://github.com/radiantearth/stac-spec/blob/v1.1.0/commons/common-metadata.md)**:\n A list of commonly used fields throughout all domains\n* **[Content Extensions](https://stac-extensions.github.io)**:\n Domain-specific fields for domains such as EO, SAR and point clouds.\n* **Custom Properties**:\n It is generally allowed to add custom fields.", "type": "object", "additionalProperties": { "oneOf": [ { "type": "array", "title": "Set of values", "items": { "description": "A value of any type." } }, { "$ref": "#/$defs/collection_summary_stats" }, { "$ref": "#/$defs/json_schema" } ] } }, "assets": { "description": "Dictionary of asset objects for data that can be downloaded,\neach with a unique key.\nThe keys MAY be used by clients as file names.", "allOf": [ { "$ref": "#/$defs/stac_assets" } ] } }, "$defs": { "asset": { "title": "STAC Asset", "type": "object", "required": [ "href" ], "properties": { "href": { "title": "Asset location", "description": "URL to the downloadable asset.\nThe URLs SHOULD be available without authentication so that external clients can download them easily. If the data is confidential, signed URLs SHOULD be used to protect against unauthorized access from third parties.", "type": "string" }, "title": { "description": "The displayed title for clients and users.", "type": "string" }, "description": { "type": "string", "format": "commonmark", "description": "Multi-line description to explain the asset.\n\n[CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich\ntext representation." }, "type": { "title": "Media Type", "description": "Media type of the asset.", "type": "string" }, "roles": { "type": "array", "items": { "type": "string" }, "description": "Purposes of the asset. Can be any value, but commonly used values are:\n\n* `thumbnail`: A visualization of the data, usually a lower-resolution true color image in JPEG or PNG format.\n* `reproducibility`: Information how the data was produced and/or can be reproduced, e.g. the process graph used to compute the data in JSON format.\n* `data`: The computed data in the format specified by the user in the process graph (applicable in `GET /jobs/{job_id}/results` only).\n* `metadata`: Additional metadata available for the computed data." } } }, "bbox": { "description": "Each bounding box is provided as four or six numbers,\ndepending on whether the coordinate reference system\nincludes a vertical axis (height or depth):\n\n* West (lower left corner, coordinate axis 1)\n* South (lower left corner, coordinate axis 2)\n* Base (optional, minimum value, coordinate axis 3)\n* East (upper right corner, coordinate axis 1)\n* North (upper right corner, coordinate axis 2)\n* Height (optional, maximum value, coordinate axis 3)\n\nThe coordinate reference system of the values is WGS 84\nlongitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84).\n\nFor WGS 84 longitude/latitude the values are in most cases\nthe sequence of minimum longitude, minimum latitude, maximum\nlongitude and maximum latitude.\n\nHowever, in cases where the box spans the antimeridian the\nfirst value (west-most box edge) is larger than the third value\n(east-most box edge).\n\nIf the vertical axis is included, the third and the sixth\nnumber are the bottom and the top of the 3-dimensional bounding box.", "type": "array", "oneOf": [ { "title": "4 elements", "minItems": 4, "maxItems": 4 }, { "title": "6 elements", "minItems": 6, "maxItems": 6 } ], "items": { "type": "number" } }, "collection_id": { "type": "string", "description": "A unique identifier for the collection, which MUST match the specified pattern.", "pattern": "^[\\w\\-\\.~\\/]+$" }, "collection_summary_stats": { "type": "object", "title": "Statistics / Range", "description": "By default, only ranges with a minimum and a maximum value can be specified. Ranges can be specified for ordinal values only, which means they need to have a rank order. Therefore, ranges can only be specified for numbers and some special types of strings. Examples: grades (A to F), dates or times. Implementors are free to add other derived statistical values to the object, for example `mean` or `stddev`.", "required": [ "minimum", "maximum" ], "properties": { "minimum": { "description": "The minimum value (inclusive).", "anyOf": [ { "type": "string" }, { "type": "number" } ] }, "maximum": { "description": "The maximum value (inclusive).", "anyOf": [ { "type": "string" }, { "type": "number" } ] } } }, "description": { "type": "string", "format": "commonmark", "description": "Detailed description to explain the entity.\n\n[CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation." }, "dimension": { "title": "Dimension", "description": "A dimension, each object represents a distinct dimension with the key being the dimension name.", "type": "object", "required": [ "type" ], "properties": { "type": { "description": "Type of the dimension.", "type": "string", "enum": [ "spatial", "temporal", "bands", "geometry", "other" ] }, "description": { "$ref": "#/$defs/description" } } }, "json_schema": { "type": "object", "title": "JSON Schema", "description": "A JSON Schema compliant to [JSON Schema draft-07](https://json-schema.org/draft-07/json-schema-validation.html) or later.\n\nJSON Schemas SHOULD always be dereferenced (i.e. all `$refs` should be resolved).\nThis allows clients to consume the schemas much better.\nClients are not expected to support dereferencing `$refs`.\n\nNote: The specified schema in the OpenAPI document is only a common subset of JSON Schema.\nAdditional keywords from the JSON Schema specification MAY be used.", "properties": { "$schema": { "description": "The JSON Schema version. If not given in the context of openEO,\ndefaults to JSON Schema draft-07: `http://json-schema.org/draft-07/schema#`\n\nThe default value for `$schema` property may have to be added to the JSON Schema\nobject before passing it to a JSON Schema validator.", "type": "string", "format": "uri", "default": "http://json-schema.org/draft-07/schema#" }, "$id": { "description": "ID of your JSON Schema.", "type": "string", "format": "uri" }, "type": { "description": "The allowed data type(s) for a value.\n\nIf this property is not present, all data types are allowed.", "oneOf": [ { "$ref": "#/$defs/json_schema_type" }, { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/json_schema_type" } } ] }, "pattern": { "type": "string", "format": "regex", "description": "The regular expression a string value must match against." }, "enum": { "type": "array", "items": {}, "description": "An exclusive list of allowed values." }, "minimum": { "type": "number", "description": "The minimum value (inclusive) allowed for a numerical value." }, "maximum": { "type": "number", "description": "The maximum value (inclusive) allowed for a numerical value." }, "minItems": { "type": "number", "minimum": 0, "default": 0, "description": "The minimum number of items required in an array." }, "maxItems": { "type": "number", "minimum": 0, "description": "The maximum number of items required in an array." }, "items": { "description": "Specifies schemas for the items in an array.", "anyOf": [ { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/json_schema" } }, { "$ref": "#/$defs/json_schema" } ] } }, "additionalProperties": { "description": "Any other property supported by the JSON Schema version that is given through the property `$schema` are allowed. Defaults to JSON Schema [draft-07](https://json-schema.org/draft-07/json-schema-validation.html), but can also be any later version of JSON Schema." } }, "json_schema_type": { "type": "string", "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ] }, "link": { "title": "Link", "description": "A link to another resource on the web. Bases on [RFC 5899](https://www.rfc-editor.org/rfc/rfc5988.html).", "type": "object", "required": [ "href", "rel" ], "properties": { "rel": { "type": "string", "description": "Relationship between the current document and the linked document. SHOULD be a [registered link relation type](https://www.iana.org/assignments/link-relations/link-relations.xml) whenever feasible." }, "href": { "type": "string", "description": "The value MUST be a valid URL.", "format": "uri" }, "type": { "type": "string", "description": "The value MUST be a string that hints at the format used to represent data at the provided URI, preferably a media (MIME) type." }, "title": { "type": "string", "description": "Used as a human-readable label for a link." } } }, "stac_assets": { "type": "object", "title": "Assets", "description": "Dictionary of asset objects for data that can be downloaded, each with a\nunique key. The keys MAY be used by clients as file names.", "additionalProperties": { "$ref": "#/$defs/asset" } }, "stac_extensions": { "type": "array", "description": "A list of implemented STAC extensions. The list contains URLs to the JSON Schema files it can be validated against.", "uniqueItems": true, "items": { "anyOf": [ { "title": "Reference to a JSON Schema", "type": "string", "format": "uri" }, { "title": "Reference to a core extension (STAC < 1.0.0-rc.1 only, DEPRECATED)", "type": "string" } ] } }, "stac_license": { "type": "string", "description": "License(s) of the data as a SPDX [License identifier](https://spdx.org/licenses/).\nAlternatively, use `proprietary` if the license is not on the SPDX\nlicense list or `various` if multiple licenses apply. In these two cases\nlinks to the license texts SHOULD be added, see the `license` link\nrelation type.\n\nNon-SPDX licenses SHOULD add a link to the license text with the\n`license` relation in the links section. The license text MUST NOT be\nprovided as a value of this field. If there is no public license URL\navailable, it is RECOMMENDED to host the license text and link to it." }, "stac_providers": { "type": "array", "description": "A list of providers, which MAY include all organizations capturing or processing the data or the hosting provider. Providers SHOULD be listed in chronological order with the most recent provider being the last element of the list.", "items": { "type": "object", "title": "Provider", "required": [ "name" ], "properties": { "name": { "description": "The name of the organization or the individual.", "type": "string" }, "description": { "description": "Multi-line description to add further provider information such as processing details for processors and producers, hosting details for hosts or basic contact information.\n\nCommonMark 0.29 syntax MAY be used for rich text representation.", "type": "string" }, "roles": { "description": "Roles of the provider.\n\nThe provider's role(s) can be one or more of the following\nelements:\n* `licensor`: The organization that is licensing the dataset under\nthe license specified in the collection's license field.\n* `producer`: The producer of the data is the provider that\ninitially captured and processed the source data, e.g. ESA for\nSentinel-2 data.\n* `processor`: A processor is any provider who processed data to a\nderived product.\n* `host`: The host is the actual provider offering the data on their\nstorage. There SHOULD be no more than one host, specified as last\nelement of the list.", "type": "array", "items": { "type": "string", "enum": [ "producer", "licensor", "processor", "host" ] } }, "url": { "description": "Homepage on which the provider describes the dataset and publishes contact information.", "type": "string", "format": "uri" } } } }, "stac_version": { "type": "string", "description": "The [version of the STAC specification](https://github.com/radiantearth/stac-spec/releases), which MAY not be equal to the [STAC API version](#tag/EO-Data-Discovery/STAC).\nThe openEO API allows for the STAC versions 1.x.x (RECOMMENDED) and 0.9.x (DEPRECATED).", "pattern": "^(0\\.9.\\d+|1\\.\\d+.\\d+)" } } }