Download OpenAPI specification:Download
The geodatacube API specification for interoperable cloud-based processing of large Earth observation datacubes.
Conformance class: https://api.geodatacube.example/1.0.0-beta
Unless otherwise stated the API works case sensitive.
All names SHOULD be written in snake case, i.e. words are separated with one underscore character (_
) and no spaces, with all letters lower-cased. Example: hello_world
. This applies particularly to endpoints and JSON property names. HTTP header fields are generally case-insensitive according to RFC 7230 and in the specification we follow their respective casing conventions, e.g. Content-Type
or GDC-Identifier
, for better readability and consistency.
This uses HTTP REST Level 2 for communication between client and back-end server.
Public APIs MUST be available via HTTPS only.
Endpoints are made use meaningful HTTP verbs (e.g. GET, POST, PUT, PATCH, DELETE) whenever technically possible. If there is a need to transfer big chunks of data for a GET requests to the back-end, POST requests MAY be used as a replacement as they support to send data via request body. Unless otherwise stated, PATCH requests are only defined to work on direct (first-level) children of the full JSON object. Therefore, changing a property on a deeper level of the full JSON object always requires to send the whole JSON object defined by the first-level property.
Naming of endpoints follow the REST principles. Therefore, endpoints are centered around resources. Resource identifiers MUST be named with a noun in plural form except for single actions that can not be modelled with the regular HTTP verbs. Single actions MUST be single endpoints with a single HTTP verb (POST is RECOMMENDED) and no other endpoints beneath it.
The API makes use of HTTP Content Negotiation,
including, but not limited to, the request headers Accept
, Accept-Charset
and Accept-Language
.
The API uses JSON for request and response bodies whenever feasible. Services use JSON as the default encoding. Other encodings can be requested using HTTP Content Negotiation (Accept
header). Clients and servers MUST NOT rely on the order in which properties appear in JSON. To keep the response size small, lists of resources (e.g. the list of batch jobs) usually should not include nested JSON objects, if this information can be requested from the individual resource endpoints (e.g. the metadata for a single batch job).
Services use UTF-8 as the default charset if not negotiated otherwise with HTTP Content Negotiation (Accept-Charset
header).
The API is designed in a way that to most entities (e.g. collections and processes) a set of links can be added. These can be alternate representations, e.g. data discovery via OGC WCS or OGC CSW, references to a license, references to actual raw data for downloading, detailed information about pre-processing and more. Clients should allow users to follow the links.
Whenever links are utilized in the API, the description explains which relation (rel
property) types are commonly used.
A list of standardized link relations types is provided by IANA and the API tries to align whenever feasible.
Some very common relation types - usually not mentioned explicitly in the description of links
fields - are:
self
: which allows link to the location that the resource can be (permanently) found online.This is particularly useful when the data is data is made available offline, so that the downstream user knows where the data has come from.
alternate
: An alternative representation of the resource, may it be another metadata standard the data is available in or simply a human-readable version in HTML or PDF.
about
: A resource that is related or further explains the resource, e.g. a user guide.
canonical
: This relation type usually points to a publicly accessible and more long-lived URL for a resource that otherwise often requires (Bearer) authentication with a short-lived token.
This way the the exposed resources can be used by clients without additional authentication steps.
For example, a shared user-defined process or batch job results could be exposed via a canonical link.
If a URL should be publicly available to everyone, it can simply a user-specific URL, e.g. https://geodatacube.example/processes/john_doe/ndvi
.
For resources that should only be accessible to a certain group of user, a signed URL could be given, e.g. https://geodatacube.example/processes/81zjh1tc2pt52gbx/ndvi
.
Generally, it is RECOMMENDED to add descriptive titles (propertty title
) and media type information (propertty type
) for a better user experience.
The success of requests MUST be indicated using HTTP status codes according to RFC 7231.
If the API responds with a status code between 100 and 399 the back-end indicates that the request has been handled successfully.
In general an error is communicated with a status code between 400 and 599. Client errors are defined as a client passing invalid data to the service and the service correctly rejecting that data. Examples include invalid credentials, incorrect parameters, unknown versions, or similar. These are generally "4xx" HTTP error codes and are the result of a client passing incorrect or invalid data. Client errors do not contribute to overall API availability.
Server errors are defined as the server failing to correctly return in response to a valid client request. These are generally "5xx" HTTP error codes. Server errors do contribute to the overall API availability. Calls that fail due to rate limiting or quota failures MUST NOT count as server errors.
A JSON error object SHOULD be sent with all responses that have a status code between 400 and 599.
{
"id": "936DA01F-9ABD-4D9D-80C7-02AF85C822A8",
"code": "SampleError",
"message": "A sample error message.",
"url": "https://geodatacube.example/docs/errors/SampleError"
}
Sending code
and message
is REQUIRED.
A back-end MAY add a free-form id
(unique identifier) to the error response to be able to log and track errors with further non-disclosable details.
The code
is proprietary textual error code.
The message
explains the reason the server is rejecting the request. For "4xx" error codes the message explains how the client needs to modify the request.
By default the message MUST be sent in English language. Content Negotiation is used to localize the error messages: If an Accept-Language
header is sent by the client and a translation is available, the message should be translated accordingly and the Content-Language
header must be present in the response. See "How to localize your API" for more information.
url
is an OPTIONAL attribute and contains a link to a resource that is explaining the error and potential solutions in-depth.
The API usually uses the following HTTP status codes for successful requests:
Location
header to the newly created resource without a response body.The API has some commonly used HTTP status codes for failed requests:
400 Bad Request: The back-end responds with this error code whenever the error has its origin on client side and no other HTTP status code in the 400 range is suitable.
401 Unauthorized: The client did not provide any authentication details for a resource requiring authentication or the provided authentication details are not correct.
403 Forbidden: The client did provided correct authentication details, but the privileges/permissions of the provided credentials do not allow to request the resource.
404 Not Found: The resource specified by the path does not exist, i.e. one of the resources belonging to the specified identifiers are not available at the back-end. Note: Unsupported endpoints MAY also return HTTP status code 501.
500 Internal Server Error: The error has its origin on server side and no other status code in the 500 range is suitable.
501 Not Implemented: The requested endpoint is part of the API specification, but is not implemented (yet) by the back-end. Note: Unsupported endpoints MAY also return HTTP status code 404.
If a HTTP status code in the 400 range is returned, the client SHOULD NOT repeat the request without modifications. For HTTP status code in the 500 range, the client MAY repeat the same request later.
All HTTP status codes defined in RFC 7231 in the 400 and 500 ranges can be used as error code in addition to the most used status codes mentioned here. Responding with error codes 400 and 500 SHOULD be avoided in favor of any more specific standardized or proprietary error code.
Date, time, intervals and durations are formatted based on ISO 8601 or its profile RFC 3339 whenever there is an appropriate encoding available in the standard. All temporal data are specified based on the Gregorian calendar.
The API offers one forms of authentication by default:
GET /credentials/basic
GET /credentials/oidc
After authentication with any of the methods listed above, the tokens obtained during the authentication workflows can be sent to protected endpoints in subsequent requests.
Further authentication methods MAY be added by back-ends.
bearer
The Bearer Token MUST consist of the authentication method, a provider ID (if available) and the token itself. All separated by a forward slash `/`. Examples (replace `TOKEN` with the actual access token): (1) Basic authentication (no provider ID available): `basic//TOKEN` (2) OpenID Connect (provider ID is `ms`): `oidc/ms/TOKEN`. For OpenID Connect, the provider ID corresponds to the value specified for `id` for each provider in `GET /credentials/oidc`.
Note: Although it is possible to request several public endpoints for capabilities and discovery that don't require authorization, it is RECOMMENDED that clients (re-)request the public endpoints that support Bearer authentication with the Bearer token once available to also retrieve any private data that is made available specifically for the authenticated user. This may require that clients clear any cached data they retrieved from public endpoints before.
Cross-origin resource sharing (CORS) is a mechanism that allows restricted resources [...] on a web page to be requested from another domain outside the domain from which the first resource was served. [...] CORS defines a way in which a browser and server can interact to determine whether or not it is safe to allow the cross-origin request. It allows for more freedom and functionality than purely same-origin requests, but is more secure than simply allowing all cross-origin requests.
Source: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
Geodatacube-API-based back-ends are usually hosted on a different domain / host than the client that is requesting data from the back-end. Therefore most requests to the back-end are blocked by all modern browsers. This leads to the problem that the JavaScript library and any browser-based application can't access back-ends. Therefore, all back-end providers SHOULD support CORS to enable browser-based applications to access back-ends. CORS is a recommendation of the W3C organization. The following chapters will explain how back-end providers can implement CORS support.
Tip: Most servers can send the required headers and the responses to the OPTIONS requests automatically for all endpoints. Otherwise you may also use a proxy server to add the headers and OPTIONS responses.
The following headers MUST be included with every response:
Name | Description | Example |
---|---|---|
Access-Control-Allow-Origin | Allowed origin for the request, including protocol, host and port or * for all origins. It is RECOMMENDED to return the value * to allow requests from browser-based implementations. |
* |
Access-Control-Expose-Headers | Some endpoints require to send additional HTTP response headers such as GDC-Identifier and Location . To make these headers available to browser-based clients, they MUST be white-listed with this CORS header. The following HTTP headers are white-listed by browsers and MUST NOT be included: Cache-Control , Content-Language , Content-Length , Content-Type , Expires , Last-Modified and Pragma . At least the following headers MUST be listed in this version of the API: Link , Location , and GDC-Identifier . |
Link, Location, GDC-Identifier |
Request:
POST /api/v1/jobs HTTP/1.1
Host: geodatacube.example
Origin: https://company.example:8080
Authorization: Bearer basic//ZXhhbXBsZTpleGFtcGxl
Response:
HTTP/1.1 201 Created
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Location, GDC-Identifier, Link
Content-Type: application/json
Location: https://geodatacube.example/api/v1/jobs/abc123
GDC-Identifier: abc123
All endpoints must respond to the OPTIONS
HTTP method. This is a response for the preflight requests made by web browsers before sending the actual request (e.g. POST /jobs
). It needs to respond with a status code of 204
and no response body.
In addition to the HTTP headers shown in the table above, the following HTTP headers MUST be included with every response to an OPTIONS
request:
Name | Description | Example |
---|---|---|
Access-Control-Allow-Headers | Comma-separated list of HTTP headers allowed to be sent with the actual (non-preflight) request. MUST contain at least Authorization if any kind of authorization is implemented by the back-end. |
Authorization, Content-Type |
Access-Control-Allow-Methods | Comma-separated list of HTTP methods allowed to be requested. Back-ends MUST list all implemented HTTP methods for the endpoint. | OPTIONS, GET, POST, PATCH, PUT, DELETE |
Content-Type | SHOULD return the content type delivered by the request that the permission is requested for. | application/json |
Request:
OPTIONS /api/v1/jobs HTTP/1.1
Host: geodatacube.example
Origin: https://company.example:8080
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization, Content-Type
Note that the Access-Control-Request-*
headers are automatically attached to the requests by the browsers.
Response:
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: OPTIONS, GET, POST, PATCH, PUT, DELETE
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Expose-Headers: Location, GDC-Identifier, Link
Content-Type: application/json
General information about the API implementation and other supported capabilities at the back-end.
Lists general information about the back-end, including which version and endpoints of the geodatacube API are supported. May also include billing information.
{- "gdc_version": "1.0.0-beta",
- "backend_version": "1.1.2",
- "stac_version": "1.0.0",
- "api_version": "1.2.0",
- "type": "Catalog",
- "id": "cool-eo-cloud",
- "title": "Example Cloud Corp.",
- "description": "This service is provided to you by [Example Cloud Corp.](https://cloud.example). It implements the full geodatacube API and allows to process a range of 999 EO data sets, including \n\n* Sentinel 1/2/3 and 5\n* Landsat 7/8\n\nA free plan is available to test the service. For further information please contact our customer service at [support@cloud.example](mailto:support@cloud.example).",
- "conformsTo": [
], - "endpoints": [
- {
- "path": "/collections",
- "methods": [
- "GET"
]
}, - {
- "path": "/collections/{collection_id}",
- "methods": [
- "GET"
]
}, - {
- "path": "/processes",
- "methods": [
- "GET"
]
}, - {
- "path": "/jobs",
- "methods": [
- "GET",
- "POST"
]
}, - {
- "path": "/jobs/{job_id}",
- "methods": [
- "GET",
- "DELETE",
- "PATCH"
]
}
], - "links": [
- {
- "rel": "about",
- "type": "text/html",
- "title": "Homepage of the service provider"
}, - {
- "rel": "terms-of-service",
- "type": "text/html",
- "title": "Terms of Service"
}, - {
- "rel": "privacy-policy",
- "type": "text/html",
- "title": "Privacy Policy"
}, - {
- "rel": "create-form",
- "type": "text/html",
- "title": "User Registration"
}, - {
- "rel": "recovery-form",
- "type": "text/html",
- "title": "Reset Password"
}, - {
- "type": "application/json",
- "title": "OGC Conformance Classes"
}, - {
- "rel": "service-desc",
- "type": "application/vnd.oai.openapi+json;version=3.0",
- "title": "OpenAPI 3.0 description of the API"
}, - {
- "rel": "data",
- "type": "application/json",
- "title": "List of Datasets"
}
]
}
Lists all conformance classes specified in various standards that the implementation conforms to. Conformance classes are commonly used in all OGC APIs and the STAC API specification.
The conformance classes listed at this endpoint and listed in the
corresponding conformsTo
property in GET /
MUST be equal.
More details:
{- "conformsTo": [
]
}
The following endpoints handle authentication and basic user profiles. See also Authentication. In general, the API only defines a minimum subset of account management. It allows to authenticate and authorize a user, which may include user registration with OpenID Connect, For accounting, quota handling and similar functionality you can explore the openEO API.
Therefore, the API leaves some aspects open that have to be handled by the back-ends separately, including
Checks the credentials provided through HTTP Basic Authentication according to RFC 7617 and returns an access token for valid credentials.
The credentials (username and password) MUST be sent in the HTTP header Authorization
with type Basic
and the Base64 encoded string consisting of username and password separated by a double colon :
. The header would look as follows for username user
and password pw
: Authorization: Basic dXNlcjpwdw==
.
The access token has to be used in the Bearer token for authorization in subsequent API calls (see also the information about Bearer tokens in this document). The access token returned by this request MUST NOT be provided with basic//
prefix, but the Bearer Token sent in subsequent API calls to protected endpoints MUST be prefixed with basic//
. The header in subsequent API calls would look as follows: Authorization: Bearer basic//TOKEN
(replace TOKEN
with the actual access token).
It is RECOMMENDED to implement this authentication method for non-public services only.
{- "access_token": "b34ba2bdf9ac9ee1"
}
Lists the supported OpenID Connect providers (OP). OpenID Connect Providers MUST support OpenID Connect Discovery.
It is highly RECOMMENDED to implement OpenID Connect for public services in favor of Basic authentication.
GDC clients MUST use the access token as part of the Bearer token
for authorization in subsequent API calls (see also the information
about Bearer tokens in this document). Clients MUST NOT use the id token
or the authorization code. The access token provided by an OpenID Connect
Provider does not necessarily provide information about the issuer (i.e. the
OpenID Connect provider) and therefore a prefix MUST be added to the Bearer
Token sent in subsequent API calls to protected endpoints. The Bearer
Token sent to protected endpoints MUST consist of the authentication
method (here oidc
), the provider ID and the access token itself. All
separated by a forward slash /
. The provider ID corresponds to the
value specified for id
for each provider in the response body of this
endpoint. The header in subsequent API calls for a provider with id
ms
would look as follows: Authorization: Bearer oidc/ms/TOKEN
(replace TOKEN
with the actual access token received from the OpenID
Connect Provider).
Back-ends MAY request user information (including Claims) from the OpenID Connect Userinfo endpoint using the access token (without the prefix described above). Therefore, both openEO client and openEO back-end are relying parties (clients) to the OpenID Connect Provider.
{- "providers": [
- {
- "id": "egi",
- "title": "EGI (default)",
- "description": "Login with your academic account.",
- "scopes": [
- "openid",
- "profile",
- "email"
], - "default_clients": [
- {
- "id": "KStcUzD5AIUA",
- "grant_types": [
- "implicit",
- "authorization_code+pkce",
- "urn:ietf:params:oauth:grant-type:device_code+pkce",
- "refresh_token"
],
}
]
}, - {
- "id": "google",
- "title": "Google",
- "description": "Login with your Google Account.",
- "scopes": [
- "openid",
- "profile",
- "email",
- "earthengine"
]
}, - {
- "id": "ms",
- "title": "Microsoft",
- "description": "Login with your Microsoft or Skype Account.",
- "scopes": [ ]
}
]
}
Lists information about the authenticated user, e.g. the user id. The endpoint MAY return the disk quota available to the user. The endpoint MAY also return links related to user management and the user profile, e.g. where payments are handled or the user profile could be edited. This endpoint MAY be extended to fulfil the specification of the OpenID Connect UserInfo Endpoint.
{- "user_id": "john_doe",
- "name": "string",
- "storage": {
- "free": 536870912,
- "quota": 1073741824
}, - "links": [
- {
- "rel": "alternate",
- "type": "text/html",
- "title": "User profile"
}, - {
- "rel": "alternate",
- "type": "text/vcard",
- "title": "vCard of John Doe"
}, - {
- "rel": "related",
- "type": "text/html",
- "title": "Invoices"
}
]
}
These endpoints allow to list the collections that are available at the back-end and can be used as data cubes for data processing. It builds on top of:
Lists available collections with at least the required information.
It is strongly RECOMMENDED to keep the response size small by
omitting larger optional values from the objects in collections
(e.g. the
STAC summaries
and cube:dimensions
properties).
To get the full metadata for a collection clients MUST
request GET /collections/{collection_id}
.
Note: Although it is possible to request public collections without authorization, it is RECOMMENDED that clients (re-)request the collections with the Bearer token once available to also retrieve any private collections.
NOTE: This endpoint may return collections from STAC API / openEO API and OGC API - Coverages.
Distinguish them via the stac_version
property which is always present for STAC API / openEO API, but not for OGC API - Coverages.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "collections": [
- {
- "stac_version": "1.0.0",
- "type": "Collection",
- "id": "Sentinel-2A",
- "title": "Sentinel-2A MSI L1C",
- "description": "Sentinel-2A is a wide-swath, high-resolution, multi-spectral imaging mission supporting Copernicus Land Monitoring studies, including the monitoring of vegetation, soil and water cover, as well as observation of inland waterways and coastal areas.",
- "license": "proprietary",
- "extent": {
- "spatial": {
- "bbox": [
- [
- -180,
- -56,
- 180,
- 83
]
]
}, - "temporal": {
- "interval": [
- [
- "2015-06-23T00:00:00Z",
- "2019-01-01T00:00:00Z"
]
]
}
}, - "keywords": [
- "copernicus",
- "esa",
- "msi",
- "sentinel"
], - "providers": [
- {
- "name": "European Space Agency (ESA)",
- "roles": [
- "producer",
- "licensor"
],
}, - {
- "name": "Google Earth Engine",
- "roles": [
- "host"
],
}
], - "links": [
- {
- "rel": "license",
}
]
}, - {
- "stac_version": "1.0.0",
- "type": "Collection",
- "id": "MOD09Q1",
- "title": "MODIS/Terra Surface Reflectance 8-Day L3 Global 250m SIN Grid V006",
- "description": "The MOD09Q1 Version 6 product provides an estimate of the surface spectral reflectance of Terra MODIS Bands 1-2 corrected for atmospheric conditions such as gasses, aerosols, and Rayleigh scattering. Provided along with the two 250 m MODIS bands is one additional layer, the Surface Reflectance QC 250 m band. For each pixel, a value is selected from all the acquisitions within the 8-day composite period. The criteria for the pixel choice include cloud and solar zenith. When several acquisitions meet the criteria the pixel with the minimum channel 3 (blue) value is used. Validation at stage 3 has been achieved for all MODIS Surface Reflectance products.",
- "license": "proprietary",
- "extent": {
- "spatial": {
- "bbox": [
- [
- -180,
- -90,
- 180,
- 90
]
]
}, - "temporal": {
- "interval": [
- [
- "2000-02-01T00:00:00Z",
- null
]
]
}
}, - "links": [
]
}
], - "links": [
- {
- "rel": "alternate",
- "title": "OGC Catalogue Services 3.0"
}
]
}
Lists all information about a specific collection specified by the
identifier collection_id
.
Note: Providing the Bearer token is REQUIRED for private collections.
NOTE: This endpoint may return collections from STAC API / openEO API and OGC API - Coverages.
Distinguish them via the stac_version
property which is always present for STAC API / openEO API, but not for OGC API - Coverages.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
{- "stac_version": "1.0.0",
- "type": "Collection",
- "id": "Sentinel-2",
- "title": "Sentinel-2 MSI L2A",
- "description": "Sentinel-2A is a wide-swath, high-resolution, multi-spectral imaging mission supporting Copernicus Land Monitoring studies.",
- "license": "proprietary",
- "keywords": [
- "copernicus",
- "esa",
- "msi",
- "sentinel"
], - "providers": [
- {
- "name": "European Space Agency (ESA)",
- "roles": [
- "producer",
- "licensor"
],
}, - {
- "name": "Google",
- "roles": [
- "host"
],
}
], - "extent": {
- "spatial": {
- "bbox": [
- [
- -180,
- -56,
- 180,
- 83
]
]
}, - "temporal": {
- "interval": [
- [
- "2015-06-23T00:00:00Z",
- null
]
]
}
}, - "links": [
- {
- "rel": "license",
- "type": "application/pdf"
}, - {
- "type": "application/schema+json"
}, - {
- "rel": "about",
- "type": "text/html",
- "title": "ESA Sentinel-2 MSI Level-1C User Guide"
}, - {
- "rel": "example",
- "type": "application/json",
- "title": "Example Process for True-Color Visualization"
}, - {
- "rel": "example",
- "type": "application/json",
- "title": "Example Process for NDVI Calculation and Visualization"
}
], - "cube:dimensions": {
- "x": {
- "type": "spatial",
- "axis": "x",
- "extent": [
- -180,
- 180
], - "reference_system": 4326
}, - "y": {
- "type": "spatial",
- "axis": "y",
- "extent": [
- -56,
- 83
], - "reference_system": 4326
}, - "t": {
- "type": "temporal",
- "extent": [
- "2015-06-23T00:00:00Z",
- null
], - "step": null
}, - "bands": {
- "type": "bands",
- "values": [
- "B1",
- "B2",
- "B3",
- "B4",
- "B5",
- "B6",
- "B7",
- "B8",
- "B8A",
- "B9",
- "B10",
- "B11",
- "B12"
]
}
}, - "summaries": {
- "constellation": [
- "Sentinel-2"
], - "platform": [
- "Sentinel-2A",
- "Sentinel-2B"
], - "instruments": [
- "MSI"
], - "eo:cloud_cover": {
- "minimum": 0,
- "maximum": 75
}, - "sat:orbit_state": [
- "ascending",
- "descending"
], - "gsd": [
- 10,
- 20,
- 60
], - "eo:bands": [
- {
- "name": "B1",
- "common_name": "coastal",
- "center_wavelength": 0.4439,
- "gsd": 60
}, - {
- "name": "B2",
- "common_name": "blue",
- "center_wavelength": 0.4966,
- "gsd": 10
}, - {
- "name": "B3",
- "common_name": "green",
- "center_wavelength": 0.56,
- "gsd": 10
}, - {
- "name": "B4",
- "common_name": "red",
- "center_wavelength": 0.6645,
- "gsd": 10
}, - {
- "name": "B5",
- "center_wavelength": 0.7039,
- "gsd": 20
}, - {
- "name": "B6",
- "center_wavelength": 0.7402,
- "gsd": 20
}, - {
- "name": "B7",
- "center_wavelength": 0.7825,
- "gsd": 20
}, - {
- "name": "B8",
- "common_name": "nir",
- "center_wavelength": 0.8351,
- "gsd": 10
}, - {
- "name": "B8A",
- "common_name": "nir08",
- "center_wavelength": 0.8648,
- "gsd": 20
}, - {
- "name": "B9",
- "common_name": "nir09",
- "center_wavelength": 0.945,
- "gsd": 60
}, - {
- "name": "B10",
- "common_name": "cirrus",
- "center_wavelength": 1.3735,
- "gsd": 60
}, - {
- "name": "B11",
- "common_name": "swir16",
- "center_wavelength": 1.6137,
- "gsd": 20
}, - {
- "name": "B12",
- "common_name": "swir22",
- "center_wavelength": 2.2024,
- "gsd": 20
}
], - "proj:epsg": {
- "minimum": 32601,
- "maximum": 32660
}
}, - "assets": {
- "thumbnail": {
- "type": "image/png",
- "title": "Preview",
- "roles": [
- "thumbnail"
]
}, - "inspire": {
- "type": "application/xml",
- "title": "INSPIRE metadata",
- "description": "INSPIRE compliant XML metadata",
- "roles": [
- "metadata"
]
}
}
}
Lists all supported metadata filters (also called "queryables") for a specific collection.
This endpoint is compatible with endpoint defined in the STAC API extension
filter
and
OGC API - Features - Part 3: Filtering.
For a precise definition please follow those specifications.
This endpoints provides a JSON Schema for each queryable that geodatacube users can use in multiple scenarios:
load_collection
./collections/{collection_id}/items
endpoint.Note: Providing the Bearer token is REQUIRED for private collections.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
{- "type": "object",
- "title": "Sentinel 2A",
- "properties": {
- "eo:cloud_cover": {
- "title": "Cloud Cover",
- "type": "number",
- "minimum": 0,
- "maximum": 100
}, - "platform": {
- "title": "Platform",
- "description": "The satellite platform.",
- "type": "string",
- "enum": [
- "sentinel-2a",
- "sentinel-2b"
]
}
}, - "additionalProperties": false
}
Coverage identified by {collection_id}. Use content negotiation to request required format.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
subset | Array of strings Retrieve only part of the data by slicing or trimming along one or more axis
For trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)
An asterisk ( |
Array of numbers or Array of numbers Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):
The coordinate reference system of the values is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). For WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. If a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries. | |
datetime | string Either a date-time or an interval, open or closed. Date and time expressions adhere to RFC 3339. Open intervals are expressed using double-dots. Examples:
Only features that have a temporal property that intersects the value of
If a feature has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties. |
properties | string Select specific data record fields (measured/observed properties) to be returned.
The field name must be one of the id defined in the RangeType DataRecord fields. The field index must be an integer between 0 and the number of fields - 1 defined in the RangeType DataRecord fields. An asterisk indicates to also include subsequent fields. |
scale-factor | number For each axis, the returned coverage will contain the number of original sampled values, divided by the scale-factor. |
scale-axes | string Returns a coverage re-scaled so as to contain
|
scale-size | string When
|
subset-crs | string crs for the specified subset |
bbox-crs | string crs for the specified bbox |
crs | string reproject the output to the given crs |
f | string Enum: "png" "geotiff" "netcdf" "json" "covjson" "html" The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header. |
{- "id": "string",
- "type": "CoverageByPartitioning",
- "envelope": {
- "type": "EnvelopeByAxis",
- "id": "string",
- "axisLabels": [
- "string"
], - "axis": [
- {
- "type": "AxisExtent",
- "id": "string",
- "axisLabel": "string",
- "lowerBound": 0,
- "upperBound": 0,
- "uomLabel": "string"
}
]
}, - "partitionSet": {
- "type": "PartitionSet",
- "partition": [
- {
- "id": "string",
- "type": "PartitionRef",
- "envelope": {
- "type": "EnvelopeByAxis",
- "id": "string",
- "axisLabels": [
- "string"
], - "axis": [
- {
- "type": "AxisExtent",
- "id": "string",
- "axisLabel": "string",
- "lowerBound": 0,
- "upperBound": 0,
- "uomLabel": "string"
}
]
},
}
], - "positionValuePair": [
- {
- "id": "string",
- "type": "PVP",
- "coordinate": [
- 0
], - "value": [
- 0
]
}
]
}, - "rangeType": {
- "type": "DataRecord",
- "field": [
- {
- "type": "Quantity",
- "name": "string",
}
], - "interpolationRestriction": {
- "type": "InterpolationRestriction",
}
}, - "metadata": { }
}
a coverage's domainset; use content negotiation to request HTML or JSON
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
subset | Array of strings Retrieve only part of the data by slicing or trimming along one or more axis
For trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)
An asterisk ( |
Array of numbers or Array of numbers Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):
The coordinate reference system of the values is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). For WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. If a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries. | |
datetime | string Either a date-time or an interval, open or closed. Date and time expressions adhere to RFC 3339. Open intervals are expressed using double-dots. Examples:
Only features that have a temporal property that intersects the value of
If a feature has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties. |
crs | string reproject the output to the given crs |
bbox-crs | string crs for the specified bbox |
subset-crs | string crs for the specified subset |
f | string Default: "json" Enum: "json" "html" The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header. |
{- "type": "DomainSetRef",
}
a coverage's rangetype; use content negotiation to request HTML or JSON
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
f | string Default: "json" Enum: "json" "html" The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header. |
{- "type": "RangeTypeRef",
}
Coverage identified by {collection_id}. Use content negotiation to request required format.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
subset | Array of strings Retrieve only part of the data by slicing or trimming along one or more axis
For trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)
An asterisk ( |
Array of numbers or Array of numbers Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):
The coordinate reference system of the values is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). For WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. If a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries. | |
datetime | string Either a date-time or an interval, open or closed. Date and time expressions adhere to RFC 3339. Open intervals are expressed using double-dots. Examples:
Only features that have a temporal property that intersects the value of
If a feature has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties. |
properties | string Select specific data record fields (measured/observed properties) to be returned.
The field name must be one of the id defined in the RangeType DataRecord fields. The field index must be an integer between 0 and the number of fields - 1 defined in the RangeType DataRecord fields. An asterisk indicates to also include subsequent fields. |
scale-factor | number For each axis, the returned coverage will contain the number of original sampled values, divided by the scale-factor. |
scale-axes | string Returns a coverage re-scaled so as to contain
|
scale-size | string When
|
subset-crs | string crs for the specified subset |
bbox-crs | string crs for the specified bbox |
crs | string reproject the output to the given crs |
f | string Enum: "png" "geotiff" "netcdf" "json" "covjson" "html" The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header. |
{- "id": "string",
- "type": "CoverageByPartitioning",
- "envelope": {
- "type": "EnvelopeByAxis",
- "id": "string",
- "axisLabels": [
- "string"
], - "axis": [
- {
- "type": "AxisExtent",
- "id": "string",
- "axisLabel": "string",
- "lowerBound": 0,
- "upperBound": 0,
- "uomLabel": "string"
}
]
}, - "partitionSet": {
- "type": "PartitionSet",
- "partition": [
- {
- "id": "string",
- "type": "PartitionRef",
- "envelope": {
- "type": "EnvelopeByAxis",
- "id": "string",
- "axisLabels": [
- "string"
], - "axis": [
- {
- "type": "AxisExtent",
- "id": "string",
- "axisLabel": "string",
- "lowerBound": 0,
- "upperBound": 0,
- "uomLabel": "string"
}
]
},
}
], - "positionValuePair": [
- {
- "id": "string",
- "type": "PVP",
- "coordinate": [
- 0
], - "value": [
- 0
]
}
]
}, - "rangeType": {
- "type": "DataRecord",
- "field": [
- {
- "type": "Quantity",
- "name": "string",
}
], - "interpolationRestriction": {
- "type": "InterpolationRestriction",
}
}, - "metadata": { }
}
a coverage's domainset; use content negotiation to request HTML or JSON
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
subset | Array of strings Retrieve only part of the data by slicing or trimming along one or more axis
For trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)
An asterisk ( |
Array of numbers or Array of numbers Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):
The coordinate reference system of the values is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). For WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. If a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries. | |
datetime | string Either a date-time or an interval, open or closed. Date and time expressions adhere to RFC 3339. Open intervals are expressed using double-dots. Examples:
Only features that have a temporal property that intersects the value of
If a feature has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties. |
crs | string reproject the output to the given crs |
bbox-crs | string crs for the specified bbox |
subset-crs | string crs for the specified subset |
f | string Default: "json" Enum: "json" "html" The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header. |
{- "type": "DomainSetRef",
}
a coverage's rangetype; use content negotiation to request HTML or JSON
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
f | string Default: "json" Enum: "json" "html" The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header. |
{- "type": "RangeTypeRef",
}
OPTIONAL. Data access through OGC API - Features - Part 1 (v1.0.0) and STAC API (v1.0.0)
Lists all supported metadata filters (also called "queryables") for a specific collection.
This endpoint is compatible with endpoint defined in the STAC API extension
filter
and
OGC API - Features - Part 3: Filtering.
For a precise definition please follow those specifications.
This endpoints provides a JSON Schema for each queryable that geodatacube users can use in multiple scenarios:
load_collection
./collections/{collection_id}/items
endpoint.Note: Providing the Bearer token is REQUIRED for private collections.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
{- "type": "object",
- "title": "Sentinel 2A",
- "properties": {
- "eo:cloud_cover": {
- "title": "Cloud Cover",
- "type": "number",
- "minimum": 0,
- "maximum": 100
}, - "platform": {
- "title": "Platform",
- "description": "The satellite platform.",
- "type": "string",
- "enum": [
- "sentinel-2a",
- "sentinel-2b"
]
}
}, - "additionalProperties": false
}
Fetch features of the feature collection with id collection_id
.
Every feature in a dataset belongs to a collection. A dataset may consist of multiple feature collections. A feature collection is often a collection of features of a similar type, based on a common schema.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
Array of numbers or Array of numbers Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):
The coordinate reference system of the values is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). For WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. If a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries. | |
datetime | string Either a date-time or an interval, open or closed. Date and time expressions adhere to RFC 3339. Open intervals are expressed using double-dots. Examples:
Only features that have a temporal property that intersects the value of
If a feature has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties. |
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- -180,
- -90
], - [
- 180,
- -90
], - [
- 180,
- 90
], - [
- -180,
- 90
], - [
- -180,
- -90
]
]
]
}, - "properties": {
- "datetime": "2019-08-24T14:15:22Z",
- "start_datetime": "2019-08-24T14:15:22Z",
- "end_datetime": "2019-08-24T14:15:22Z",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "license": "Apache-2.0",
- "providers": [
- {
- "name": "Example Cloud Corp.",
- "description": "No further processing applied.",
- "roles": [
- "producer",
- "licensor",
- "host"
],
}
], - "created": "2017-01-01T09:32:12Z",
- "updated": "2017-01-01T09:36:18Z",
- "expires": "2020-11-01T00:00:00Z"
}, - "stac_version": "1.0.0",
- "id": "string",
- "bbox": [
- -180,
- -90,
- 180,
- 90
], - "assets": {
- "preview.png": {
- "type": "image/png",
- "title": "Thumbnail",
- "roles": [
- "thumbnail"
]
}, - "process.json": {
- "type": "application/json",
- "title": "Original Process",
- "roles": [
- "process",
- "reproduction"
]
}, - "1.tif": {
- "type": "image/tiff; application=geotiff",
- "title": "Band 1",
- "roles": [
- "data"
]
}, - "2.tif": {
- "type": "image/tiff; application=geotiff",
- "title": "Band 2",
- "roles": [
- "data"
]
}, - "inspire.xml": {
- "type": "application/xml",
- "title": "INSPIRE metadata",
- "description": "INSPIRE compliant XML metadata",
- "roles": [
- "metadata"
]
}
}, - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "timeStamp": "2017-08-17T08:05:32Z",
- "numberMatched": 127,
- "numberReturned": 10
}
Fetch the feature with id feature_id
in the feature collection
with id collection_id
.
collection_id required | string (collection_id) ^[\w\-\.~\/]+$ Example: Sentinel-2A Collection identifier |
feature_id required | string local identifier of a feature |
{- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- -180,
- -90
], - [
- 180,
- -90
], - [
- 180,
- 90
], - [
- -180,
- 90
], - [
- -180,
- -90
]
]
]
}, - "properties": {
- "datetime": "2019-08-24T14:15:22Z",
- "start_datetime": "2019-08-24T14:15:22Z",
- "end_datetime": "2019-08-24T14:15:22Z",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "license": "Apache-2.0",
- "providers": [
- {
- "name": "Example Cloud Corp.",
- "description": "No further processing applied.",
- "roles": [
- "producer",
- "licensor",
- "host"
],
}
], - "created": "2017-01-01T09:32:12Z",
- "updated": "2017-01-01T09:36:18Z",
- "expires": "2020-11-01T00:00:00Z"
}, - "stac_version": "1.0.0",
- "id": "string",
- "bbox": [
- -180,
- -90,
- 180,
- 90
], - "assets": {
- "preview.png": {
- "type": "image/png",
- "title": "Thumbnail",
- "roles": [
- "thumbnail"
]
}, - "process.json": {
- "type": "application/json",
- "title": "Original Process",
- "roles": [
- "process",
- "reproduction"
]
}, - "1.tif": {
- "type": "image/tiff; application=geotiff",
- "title": "Band 1",
- "roles": [
- "data"
]
}, - "2.tif": {
- "type": "image/tiff; application=geotiff",
- "title": "Band 2",
- "roles": [
- "data"
]
}, - "inspire.xml": {
- "type": "application/xml",
- "title": "INSPIRE metadata",
- "description": "INSPIRE compliant XML metadata",
- "roles": [
- "metadata"
]
}
}, - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
OPTIONAL. These endpoints allow to list the predefined processes that are available at the back-end. To list user-defined processes see 'openEO - User-Defined Processes'.
Lists all predefined processes and returns detailed process descriptions, including parameters and return values.
NOTE: This endpoint may return processes from openEO and OGC API - Processes.
Distinguish them via the version
property (OGC API) and the parameters
/ returns
(openEO) properties.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "processes": [
- {
- "id": "apply",
- "summary": "Apply a process to each pixel",
- "description": "Applies a *unary* process to each pixel value in the data cube (i.e. a local operation). A unary process takes a single value and returns a single value, for example ``abs()`` or ``linear_scale_range()``.",
- "categories": [
- "cubes"
], - "parameters": [
- {
- "name": "data",
- "description": "A data cube.",
- "schema": {
- "type": "object",
- "subtype": "datacube"
}
}, - {
- "name": "process",
- "description": "A unary process to be applied on each value, may consist of multiple sub-processes.",
- "schema": {
- "type": "object",
- "subtype": "process-graph",
- "parameters": [
- {
- "name": "x",
- "description": "The value to process.",
- "schema": {
- "description": "Any data type."
}
}
]
}
}
], - "returns": {
- "description": "A data cube with the newly computed values. The resolution, cardinality and the number of dimensions are the same as for the original data cube.",
- "schema": {
- "type": "object",
- "subtype": "datacube"
}
}
}, - {
- "id": "multiply",
- "summary": "Multiplication of two numbers",
- "description": "Multiplies the two numbers `x` and `y` (*x * y*) and returns the computed product.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.",
- "categories": [
- "math"
], - "parameters": [
- {
- "name": "x",
- "description": "The multiplier.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}, - {
- "name": "y",
- "description": "The multiplicand.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}
], - "returns": {
- "description": "The computed product of the two numbers.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}, - "exceptions": {
- "MultiplicandMissing": {
- "message": "Multiplication requires at least two numbers."
}
}, - "examples": [
- {
- "arguments": {
- "x": 5,
- "y": 2.5
}, - "returns": 12.5
}, - {
- "arguments": {
- "x": -2,
- "y": -4
}, - "returns": 8
}, - {
- "arguments": {
- "x": 1,
- "y": null
}, - "returns": null
}
], - "links": [
- {
- "rel": "about",
- "title": "Product explained by Wolfram MathWorld"
}, - {
- "rel": "about",
- "title": "IEEE Standard 754-2019 for Floating-Point Arithmetic"
}
]
}
], - "links": [
- {
- "rel": "alternate",
- "type": "text/html",
- "title": "HTML version of the processes"
}
]
}
The process description contains information about inputs and outputs and a link to the execution-endpoint for the process. The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation:
Implementations SHOULD consider supporting the OGC process description.
For more information, see Section 7.10.
processID required | string ID of the OGC process |
{- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "id": "string",
- "version": "string",
- "jobControlOptions": [
- "sync-execute"
], - "outputTransmission": [
- "value"
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "inputs": {
- "property1": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "minOccurs": 1,
- "maxOccurs": 1,
- "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "property2": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "minOccurs": 1,
- "maxOccurs": 1,
- "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}
}, - "outputs": {
- "property1": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "property2": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}
}
}
Lists all user-defined processes (process graphs) of the authenticated user that are stored at the back-end.
It is strongly RECOMMENDED to keep the response size small by
omitting larger optional values from the objects in processes
(e.g. the exceptions
, examples
and links
properties).
To get the full metadata for a user-defined process clients MUST
request GET /process_graphs/{process_graph_id}
.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "processes": [
- {
- "id": "evi",
- "summary": "Enhanced Vegetation Index",
- "description": "Computes the Enhanced Vegetation Index (EVI). It is computed with the following formula: `2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)`.",
- "parameters": [
- {
- "name": "red",
- "description": "Value from the red band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "blue",
- "description": "Value from the blue band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "nir",
- "description": "Value from the near infrared band.",
- "schema": {
- "type": "number"
}
}
], - "returns": {
- "description": "Computed EVI.",
- "schema": {
- "type": "number"
}
}
}, - {
- "id": "ndsi",
- "summary": "Normalized-Difference Snow Index",
- "parameters": [
- {
- "name": "green",
- "description": "Value from the Visible Green (0.53 - 0.61 micrometers) band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "swir",
- "description": "Value from the Short Wave Infrared (1.55 - 1.75 micrometers) band.",
- "schema": {
- "type": "number"
}
}
], - "returns": {
- "schema": {
- "type": "number"
}
}
}, - {
- "id": "my_custom_process"
}
], - "links": [ ]
}
Lists all predefined processes and returns detailed process descriptions, including parameters and return values.
NOTE: This endpoint may return processes from openEO and OGC API - Processes.
Distinguish them via the version
property (OGC API) and the parameters
/ returns
(openEO) properties.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "processes": [
- {
- "id": "apply",
- "summary": "Apply a process to each pixel",
- "description": "Applies a *unary* process to each pixel value in the data cube (i.e. a local operation). A unary process takes a single value and returns a single value, for example ``abs()`` or ``linear_scale_range()``.",
- "categories": [
- "cubes"
], - "parameters": [
- {
- "name": "data",
- "description": "A data cube.",
- "schema": {
- "type": "object",
- "subtype": "datacube"
}
}, - {
- "name": "process",
- "description": "A unary process to be applied on each value, may consist of multiple sub-processes.",
- "schema": {
- "type": "object",
- "subtype": "process-graph",
- "parameters": [
- {
- "name": "x",
- "description": "The value to process.",
- "schema": {
- "description": "Any data type."
}
}
]
}
}
], - "returns": {
- "description": "A data cube with the newly computed values. The resolution, cardinality and the number of dimensions are the same as for the original data cube.",
- "schema": {
- "type": "object",
- "subtype": "datacube"
}
}
}, - {
- "id": "multiply",
- "summary": "Multiplication of two numbers",
- "description": "Multiplies the two numbers `x` and `y` (*x * y*) and returns the computed product.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.",
- "categories": [
- "math"
], - "parameters": [
- {
- "name": "x",
- "description": "The multiplier.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}, - {
- "name": "y",
- "description": "The multiplicand.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}
], - "returns": {
- "description": "The computed product of the two numbers.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}, - "exceptions": {
- "MultiplicandMissing": {
- "message": "Multiplication requires at least two numbers."
}
}, - "examples": [
- {
- "arguments": {
- "x": 5,
- "y": 2.5
}, - "returns": 12.5
}, - {
- "arguments": {
- "x": -2,
- "y": -4
}, - "returns": 8
}, - {
- "arguments": {
- "x": 1,
- "y": null
}, - "returns": null
}
], - "links": [
- {
- "rel": "about",
- "title": "Product explained by Wolfram MathWorld"
}, - {
- "rel": "about",
- "title": "IEEE Standard 754-2019 for Floating-Point Arithmetic"
}
]
}
], - "links": [
- {
- "rel": "alternate",
- "type": "text/html",
- "title": "HTML version of the processes"
}
]
}
The process description contains information about inputs and outputs and a link to the execution-endpoint for the process. The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation:
Implementations SHOULD consider supporting the OGC process description.
For more information, see Section 7.10.
processID required | string ID of the OGC process |
{- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "id": "string",
- "version": "string",
- "jobControlOptions": [
- "sync-execute"
], - "outputTransmission": [
- "value"
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "inputs": {
- "property1": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "minOccurs": 1,
- "maxOccurs": 1,
- "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "property2": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "minOccurs": 1,
- "maxOccurs": 1,
- "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}
}, - "outputs": {
- "property1": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "property2": {
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "metadata": [
- {
- "title": "string",
- "role": "string",
- "href": "string"
}
], - "additionalParameters": {
- "title": "string",
- "role": "string",
- "href": "string",
- "parameters": [
- {
- "name": "string",
- "value": [
- "string"
]
}
]
}, - "schema": {
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}
}
}
Create a new job.
For more information, see Section 7.11.
processID required | string ID of the OGC process |
Mandatory execute request JSON
object | |
object | |
response | string Default: "raw" Enum: "raw" "document" |
object (ogc_subscriber) Optional URIs for callbacks for this job. Support for this parameter is not required and the parameter may be
removed from the API definition, if conformance class 'callback'
is not listed in the conformance declaration under |
{- "inputs": {
- "property1": "string",
- "property2": "string"
}, - "outputs": {
- "property1": {
- "format": {
- "mediaType": "string",
- "encoding": "string",
- "schema": "string"
}, - "transmissionMode": "value"
}, - "property2": {
- "format": {
- "mediaType": "string",
- "encoding": "string",
- "schema": "string"
}, - "transmissionMode": "value"
}
}, - "response": "raw",
- "subscriber": {
}
}
{- "processID": "string",
- "type": "process",
- "jobID": "string",
- "status": "accepted",
- "message": "string",
- "created": "2019-08-24T14:15:22Z",
- "started": "2019-08-24T14:15:22Z",
- "finished": "2019-08-24T14:15:22Z",
- "updated": "2019-08-24T14:15:22Z",
- "progress": 100,
- "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
{- "property1": "string",
- "property2": "string"
}
Lists all batch jobs submitted by a user.
It is strongly RECOMMENDED to keep the response size small by
omitting all optional non-scalar values (i.e. arrays and objects) from
objects in jobs
.
To get the full metadata for a job clients MUST request GET /jobs/{job_id}
.
NOTE: This endpoint may return jobs from openEO and OGC API - Processes.
Distinguish them via the jobID
(OGC API) and the id
(openEO) property.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "jobs": [
- {
- "id": "a3cca2b2aa1e3b5b",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "status": "running",
- "progress": 75.5,
- "created": "2017-01-01T09:32:12Z",
- "updated": "2017-01-01T09:36:18Z",
- "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
}, - "log_level": "warning",
- "links": [
- {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Results",
}, - {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Logs",
}
]
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
Lists information about a batch job.
NOTE: This endpoint may return a job from openEO or OGC API - Processes.
Distinguish them via the jobID
(OGC API) and the id
(openEO) property.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
{- "id": "a3cca2b2aa1e3b5b",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "status": "running",
- "progress": 75.5,
- "created": "2017-01-01T09:32:12Z",
- "updated": "2017-01-01T09:36:18Z",
- "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
}, - "log_level": "warning",
- "links": [
- {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Results",
}, - {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Logs",
}
]
}
Deletes all data related to this job. Computations are stopped and computed results are deleted. This job won't generate additional costs for processing.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
{- "processID": "string",
- "type": "process",
- "jobID": "string",
- "status": "accepted",
- "message": "string",
- "created": "2019-08-24T14:15:22Z",
- "started": "2019-08-24T14:15:22Z",
- "finished": "2019-08-24T14:15:22Z",
- "updated": "2019-08-24T14:15:22Z",
- "progress": 100,
- "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
NOTE: This endpoint may return a job from openEO or OGC API - Processes.
Distinguish them via the assets
property which is always present for openEO, but not for OGC API - Processes.
Lists available results of a job. In case of a failure, lists exceptions instead.
For more information, see Section 7.13.
Lists signed URLs pointing to the processed files, usually after the batch job
has finished. Back-ends may also point to intermediate results after the
job has stopped due to an error or if the partial
parameter has been set.
The response includes additional metadata. It is a valid
STAC Item
(if it has spatial and temporal references included) or a valid
STAC Collection.
The assets to download are in both cases available in the property assets
and have the same structure. All additional metadata is not strictly required
to download the files, but are helpful for users to understand the data.
STAC Collections can either (1) add all assets as collection-level assets or (2) link to STAC Catalogs and STAC Items with signed URLs, which will provide a full STAC catalog structure a client has to go through. Option 2 is overall the better architectural choice and allows a fine-grained description of the processed data.
Clients are RECOMMENDED to store this response and all potential sub-catalogs and items with the assets so that the downloaded data is then a self-contained STAC catalog user could publish easily with all the data and metadata.
URL signing is a way to protect files from unauthorized access with a
key in the URL instead of HTTP header based authorization. The URL
signing key is similar to a password and its inclusion in the URL allows
to download files using simple GET requests supported by a wide range of
programs, e.g. web browsers or download managers. Back-ends are
responsible to generate the URL signing keys and to manage their
appropriate expiration. The back-end MAY indicate an expiration time by
setting the expires
property in the reponse. Requesting this endpoint
SHOULD always return non-expired URLs. Signed URLs that were generated
for a previous request and already expired SHOULD NOT be reused,
but regenerated with new expiration time.
Signed URLs that expired MAY return an error.
It is strongly recommended to add a link with relation type canonical
to the STAC Item or STAC Collection (see the links
property for details).
If processing has not finished yet and the partial
parameter is not set to true
requests to this endpoint MUST be rejected an error.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
partial | boolean Default: false openEO only: If set to |
{- "property1": "string",
- "property2": "string"
}
Lists supported input and output file formats. Input file formats specify which file a back-end can read from. Output file formats specify which file a back-end can write to.
The response to this request is an object listing all available input and output file formats separately with their parameters and additional data. This endpoint does not include the supported secondary web services.
Note: Format names and parameters MUST be fully aligned with the GDAL codes if available, see GDAL Raster Formats and OGR Vector Formats. It is OPTIONAL to support all output format parameters supported by GDAL. Some file formats not available through GDAL may be defined centrally for the geodatacube. Custom file formats or parameters MAY be defined.
The format descriptions must describe how the file formats relate to data cubes. Input file formats must describe how the files have to be structured to be transformed into data cubes. Output file formats must describe how the data cubes are stored at the back-end and how the resulting file structure looks like.
Back-ends MUST NOT support aliases, for example it is not allowed to
support geotiff
instead of gtiff
. Nevertheless, geodatacube clients MAY
translate user input input for convenience (e.g. translate geotiff
to
gtiff
). Also, for a better user experience the back-end can specify a
title
.
Format names MUST be accepted in a case insensitive manner throughout the API.
{- "output": {
- "GTiff": {
- "title": "GeoTiff",
- "description": "Export to GeoTiff. Doesn't support cloud-optimized GeoTiffs (COGs) yet.",
- "gis_data_types": [
- "raster"
], - "parameters": {
- "tiled": {
- "type": "boolean",
- "description": "This option can be used to force creation of tiled TIFF files [true]. By default [false] stripped TIFF files are created.",
- "default": false
}, - "compress": {
- "type": "string",
- "description": "Set the compression to use.",
- "default": "NONE",
- "enum": [
- "JPEG",
- "LZW",
- "DEFLATE",
- "NONE"
]
}, - "jpeg_quality": {
- "type": "integer",
- "description": "Set the JPEG quality when using JPEG.",
- "minimum": 1,
- "maximum": 100,
- "default": 75
}
}, - "links": [
- {
- "rel": "about",
- "title": "GDAL on the GeoTiff file format and storage options"
}
]
}, - "GPKG": {
- "title": "OGC GeoPackage",
- "gis_data_types": [
- "raster",
- "vector"
], - "parameters": {
- "version": {
- "type": "string",
- "description": "Set GeoPackage version. In AUTO mode, this will be equivalent to 1.2 starting with GDAL 2.3.",
- "enum": [
- "auto",
- "1",
- "1.1",
- "1.2"
], - "default": "auto"
}
}, - "links": [
- {
- "rel": "about",
- "title": "GDAL on GeoPackage for raster data"
}, - {
- "rel": "about",
- "title": "GDAL on GeoPackage for vector data"
}
]
}
}, - "input": {
- "GPKG": {
- "title": "OGC GeoPackage",
- "gis_data_types": [
- "raster",
- "vector"
], - "parameters": {
- "table": {
- "type": "string",
- "description": "**RASTER ONLY.** Name of the table containing the tiles. If the GeoPackage dataset only contains one table, this option is not necessary. Otherwise, it is required."
}
}, - "links": [
- {
- "rel": "about",
- "title": "GDAL on GeoPackage for raster data"
}, - {
- "rel": "about",
- "title": "GDAL on GeoPackage for vector data"
}
]
}
}
}
Lists all predefined processes and returns detailed process descriptions, including parameters and return values.
NOTE: This endpoint may return processes from openEO and OGC API - Processes.
Distinguish them via the version
property (OGC API) and the parameters
/ returns
(openEO) properties.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "processes": [
- {
- "id": "apply",
- "summary": "Apply a process to each pixel",
- "description": "Applies a *unary* process to each pixel value in the data cube (i.e. a local operation). A unary process takes a single value and returns a single value, for example ``abs()`` or ``linear_scale_range()``.",
- "categories": [
- "cubes"
], - "parameters": [
- {
- "name": "data",
- "description": "A data cube.",
- "schema": {
- "type": "object",
- "subtype": "datacube"
}
}, - {
- "name": "process",
- "description": "A unary process to be applied on each value, may consist of multiple sub-processes.",
- "schema": {
- "type": "object",
- "subtype": "process-graph",
- "parameters": [
- {
- "name": "x",
- "description": "The value to process.",
- "schema": {
- "description": "Any data type."
}
}
]
}
}
], - "returns": {
- "description": "A data cube with the newly computed values. The resolution, cardinality and the number of dimensions are the same as for the original data cube.",
- "schema": {
- "type": "object",
- "subtype": "datacube"
}
}
}, - {
- "id": "multiply",
- "summary": "Multiplication of two numbers",
- "description": "Multiplies the two numbers `x` and `y` (*x * y*) and returns the computed product.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.",
- "categories": [
- "math"
], - "parameters": [
- {
- "name": "x",
- "description": "The multiplier.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}, - {
- "name": "y",
- "description": "The multiplicand.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}
], - "returns": {
- "description": "The computed product of the two numbers.",
- "schema": {
- "type": [
- "number",
- "null"
]
}
}, - "exceptions": {
- "MultiplicandMissing": {
- "message": "Multiplication requires at least two numbers."
}
}, - "examples": [
- {
- "arguments": {
- "x": 5,
- "y": 2.5
}, - "returns": 12.5
}, - {
- "arguments": {
- "x": -2,
- "y": -4
}, - "returns": 8
}, - {
- "arguments": {
- "x": 1,
- "y": null
}, - "returns": null
}
], - "links": [
- {
- "rel": "about",
- "title": "Product explained by Wolfram MathWorld"
}, - {
- "rel": "about",
- "title": "IEEE Standard 754-2019 for Floating-Point Arithmetic"
}
]
}
], - "links": [
- {
- "rel": "alternate",
- "type": "text/html",
- "title": "HTML version of the processes"
}
]
}
Executes a user-defined process directly (synchronously) and the result will be downloaded in the format specified in the process graph. This endpoint can be used to generate small previews or test user-defined processes before starting a batch job. Timeouts on either client- or server-side are to be expected for complex computations. Back-ends MAY send the an error immediately if the computation is expected to time out. Otherwise requests MAY time-out after a certain amount of time by sending an error.
Specifies the job details, e.g. the user-defined process and billing details.
required | object (Process Graph with metadata) A process graph, optionally enriched with process metadata. |
log_level | string (min_log_level_default) Default: "info" Enum: "error" "warning" "info" "debug" The minimum severity level for log entries that the back-end stores for the processing request. The order of the levels is as follows (from low to high severity): The default minimum log level is |
property name* additional property | any You can add additional back-end specific properties here. |
{- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "log_level": "warning",
- "property1": null,
- "property2": null
}
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Lists all batch jobs submitted by a user.
It is strongly RECOMMENDED to keep the response size small by
omitting all optional non-scalar values (i.e. arrays and objects) from
objects in jobs
.
To get the full metadata for a job clients MUST request GET /jobs/{job_id}
.
NOTE: This endpoint may return jobs from openEO and OGC API - Processes.
Distinguish them via the jobID
(OGC API) and the id
(openEO) property.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "jobs": [
- {
- "id": "a3cca2b2aa1e3b5b",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "status": "running",
- "progress": 75.5,
- "created": "2017-01-01T09:32:12Z",
- "updated": "2017-01-01T09:36:18Z",
- "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
}, - "log_level": "warning",
- "links": [
- {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Results",
}, - {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Logs",
}
]
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
Creates a new batch processing task (job) from one or more (chained) processes at the back-end.
Processing the data doesn't start yet. The job status gets initialized
as created
by default.
Specifies the job details, e.g. the user-defined process and billing details.
title | string or null (eo_title) A short description to easily distinguish entities. |
description | string or null <commonmark> (eo_description) Detailed multi-line description to explain the entity. CommonMark 0.29 syntax MAY be used for rich text representation. |
required | object (Process Graph with metadata) A process graph, optionally enriched with process metadata. |
log_level | string (min_log_level_default) Default: "info" Enum: "error" "warning" "info" "debug" The minimum severity level for log entries that the back-end stores for the processing request. The order of the levels is as follows (from low to high severity): The default minimum log level is |
property name* additional property | any You can add additional back-end specific properties here. |
{- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "log_level": "warning",
- "property1": null,
- "property2": null
}
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Modifies an existing job at the back-end, but maintains the identifier. Changes can be grouped in a single request.
The job status does not change.
Jobs can only be modified when the job is not queued and not running. Otherwise, requests to this endpoint MUST be rejected with an error.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
Specifies the job details to update.
title | string or null (eo_title) A short description to easily distinguish entities. |
description | string or null <commonmark> (eo_description) Detailed multi-line description to explain the entity. CommonMark 0.29 syntax MAY be used for rich text representation. |
object (Process Graph with metadata) A process graph, optionally enriched with process metadata. | |
log_level | string (min_log_level_update) Enum: "error" "warning" "info" "debug" Updates the minimum severity level for log entries that the back-end stores for the processing requests. The back-end doesn't need to update existing log entries. |
{- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "log_level": "warning"
}
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Lists information about a batch job.
NOTE: This endpoint may return a job from openEO or OGC API - Processes.
Distinguish them via the jobID
(OGC API) and the id
(openEO) property.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
{- "id": "a3cca2b2aa1e3b5b",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "status": "running",
- "progress": 75.5,
- "created": "2017-01-01T09:32:12Z",
- "updated": "2017-01-01T09:36:18Z",
- "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
}, - "log_level": "warning",
- "links": [
- {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Results",
}, - {
- "rel": "result",
- "type": "application/json",
- "title": "Batch Job Logs",
}
]
}
Deletes all data related to this job. Computations are stopped and computed results are deleted. This job won't generate additional costs for processing.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
{- "processID": "string",
- "type": "process",
- "jobID": "string",
- "status": "accepted",
- "message": "string",
- "created": "2019-08-24T14:15:22Z",
- "started": "2019-08-24T14:15:22Z",
- "finished": "2019-08-24T14:15:22Z",
- "updated": "2019-08-24T14:15:22Z",
- "progress": 100,
- "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
Lists log entries for the batch job, usually for debugging purposes.
Back-ends can log any information that may be relevant for a user
at any stage (status) of the batch job.
Users can log information during data processing using respective
processes such as inspect
.
If requested consecutively, it is RECOMMENDED that clients use the offset parameter to get only the entries they have not received yet.
While pagination itself is OPTIONAL, the offset
parameter is REQUIRED
to be implemented by back-ends.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
offset | string Example: offset=log1234 The last identifier (property |
level | string Default: "info" Enum: "error" "warning" "info" "debug" Example: level=error The minimum severity level for log entries that the back-end returns. The order of the levels is as follows (from low to high severity): The default minimum log level is |
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "level": "error",
- "logs": [
- {
- "id": "1",
- "code": "SampleError",
- "level": "error",
- "message": "Can't load the UDF file from the URL `https://geodatacube.example/invalid/file.txt`. Server responded with error 404.",
- "time": "2019-08-24T14:15:22Z",
- "data": null,
- "path": [
- {
- "node_id": "runudf1",
- "process_id": "ndvi",
- "namespace": null,
- "parameter": "udf"
}
], - "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
},
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
NOTE: This endpoint may return a job from openEO or OGC API - Processes.
Distinguish them via the assets
property which is always present for openEO, but not for OGC API - Processes.
Lists available results of a job. In case of a failure, lists exceptions instead.
For more information, see Section 7.13.
Lists signed URLs pointing to the processed files, usually after the batch job
has finished. Back-ends may also point to intermediate results after the
job has stopped due to an error or if the partial
parameter has been set.
The response includes additional metadata. It is a valid
STAC Item
(if it has spatial and temporal references included) or a valid
STAC Collection.
The assets to download are in both cases available in the property assets
and have the same structure. All additional metadata is not strictly required
to download the files, but are helpful for users to understand the data.
STAC Collections can either (1) add all assets as collection-level assets or (2) link to STAC Catalogs and STAC Items with signed URLs, which will provide a full STAC catalog structure a client has to go through. Option 2 is overall the better architectural choice and allows a fine-grained description of the processed data.
Clients are RECOMMENDED to store this response and all potential sub-catalogs and items with the assets so that the downloaded data is then a self-contained STAC catalog user could publish easily with all the data and metadata.
URL signing is a way to protect files from unauthorized access with a
key in the URL instead of HTTP header based authorization. The URL
signing key is similar to a password and its inclusion in the URL allows
to download files using simple GET requests supported by a wide range of
programs, e.g. web browsers or download managers. Back-ends are
responsible to generate the URL signing keys and to manage their
appropriate expiration. The back-end MAY indicate an expiration time by
setting the expires
property in the reponse. Requesting this endpoint
SHOULD always return non-expired URLs. Signed URLs that were generated
for a previous request and already expired SHOULD NOT be reused,
but regenerated with new expiration time.
Signed URLs that expired MAY return an error.
It is strongly recommended to add a link with relation type canonical
to the STAC Item or STAC Collection (see the links
property for details).
If processing has not finished yet and the partial
parameter is not set to true
requests to this endpoint MUST be rejected an error.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
partial | boolean Default: false openEO only: If set to |
{- "property1": "string",
- "property2": "string"
}
Adds a batch job to the processing queue to compute the results.
The result will be stored in the format specified in the process.
To specify the format use a process such as save_result
.
The job status is set to queued
, if processing doesn't start
instantly. The same applies if the job status is canceled
, finished
,
or error
, which restarts the job and discards previous results if the
back-end doesn't reject the request with an error.
Clients SHOULD warn users and ask for confirmation if results may get
discarded.
running
.finished
.error
.This endpoint has no effect if the job status is already queued
or
running
. In particular, it doesn't restart a running job. To restart
a queued or running job, processing MUST have been canceled before.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Cancels all related computations for this job at the back-end. It will stop generating additional costs for processing.
A subset of processed results may be available for downloading depending on the state of the job at the time it was canceled.
Results MUST NOT be deleted until the job processing is started again or
the job is completely deleted through a request to
DELETE /jobs/{job_id}
.
This endpoint only has an effect if the job status is queued
or
running
.
The job status is set to canceled
if the status was running
beforehand and partial or preliminary results are available to be
downloaded. Otherwise the status is set to created
.
job_id required | string (job_id) ^[\w\-\.~]+$ Example: a3cca2b2aa1e3b5b Identifier of the batch job. |
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
OPTIONAL. These endpoints allow to store and manage user-defined processes with their process graphs at the back-end.
Lists all user-defined processes (process graphs) of the authenticated user that are stored at the back-end.
It is strongly RECOMMENDED to keep the response size small by
omitting larger optional values from the objects in processes
(e.g. the exceptions
, examples
and links
properties).
To get the full metadata for a user-defined process clients MUST
request GET /process_graphs/{process_graph_id}
.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "processes": [
- {
- "id": "evi",
- "summary": "Enhanced Vegetation Index",
- "description": "Computes the Enhanced Vegetation Index (EVI). It is computed with the following formula: `2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)`.",
- "parameters": [
- {
- "name": "red",
- "description": "Value from the red band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "blue",
- "description": "Value from the blue band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "nir",
- "description": "Value from the near infrared band.",
- "schema": {
- "type": "number"
}
}
], - "returns": {
- "description": "Computed EVI.",
- "schema": {
- "type": "number"
}
}
}, - {
- "id": "ndsi",
- "summary": "Normalized-Difference Snow Index",
- "parameters": [
- {
- "name": "green",
- "description": "Value from the Visible Green (0.53 - 0.61 micrometers) band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "swir",
- "description": "Value from the Short Wave Infrared (1.55 - 1.75 micrometers) band.",
- "schema": {
- "type": "number"
}
}
], - "returns": {
- "schema": {
- "type": "number"
}
}
}, - {
- "id": "my_custom_process"
}
], - "links": [ ]
}
Lists all information about a user-defined process, including its process graph.
process_graph_id required | string (process_id) ^\w+$ Example: ndvi Per-user unique identifier for a user-defined process. |
A user-defined process that computes the EVI.
{- "id": "evi",
- "summary": "Enhanced Vegetation Index",
- "description": "Computes the Enhanced Vegetation Index (EVI). It is computed with the following formula: `2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)`.",
- "parameters": [
- {
- "name": "red",
- "description": "Value from the red band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "blue",
- "description": "Value from the blue band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "nir",
- "description": "Value from the near infrared band.",
- "schema": {
- "type": "number"
}
}
], - "returns": {
- "description": "Computed EVI.",
- "schema": {
- "type": "number"
}
}, - "process_graph": {
- "sub": {
- "process_id": "subtract",
- "arguments": {
- "x": {
- "from_parameter": "nir"
}, - "y": {
- "from_parameter": "red"
}
}
}, - "p1": {
- "process_id": "multiply",
- "arguments": {
- "x": 6,
- "y": {
- "from_parameter": "red"
}
}
}, - "p2": {
- "process_id": "multiply",
- "arguments": {
- "x": -7.5,
- "y": {
- "from_parameter": "blue"
}
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_parameter": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "x": {
- "from_node": "sub"
}, - "y": {
- "from_node": "sum"
}
}
}, - "p3": {
- "process_id": "multiply",
- "arguments": {
- "x": 2.5,
- "y": {
- "from_node": "div"
}
}, - "result": true
}
}
}
Stores a provided user-defined process with process graph that can be reused in other processes.
If a process with the specified process_graph_id
exists, the process
is fully replaced. The id can't be changed for existing user-defined
processes. The id MUST be unique across its namespace.
Partially updating user-defined processes is not supported.
To simplify exchanging user-defined processes, the property id
can be part of
the request body. If the values don't match, the value for id
gets
replaced with the value from the process_graph_id
parameter in the
path.
process_graph_id required | string (process_id) ^\w+$ Example: ndvi Per-user unique identifier for a user-defined process. |
Specifies the process graph with its meta data.
id | string or null^\w+$ The identifier for the process. It MUST be unique across its namespace (e.g. predefined processes or user-defined processes). Clients SHOULD warn the user if a user-defined process is added with the same identifier as one of the predefined process. |
summary | string or null A short summary of what the process does. |
description | string or null <commonmark> Detailed description to explain the entity. CommonMark 0.29 syntax MAY be used for rich text representation. In addition to the CommonMark syntax, clients can convert process IDs that are formatted as in the following example into links instead of code blocks: |
Array of objects or null (Process Parameter) A list of parameters. The order in the array corresponds to the parameter order to be used in clients that don't support named parameters. Note: Specifying an empty array is different from (if allowed)
| |
object or null (Process Return Value) Description of the data that is returned by this process. | |
categories | Array of strings (process_categories) A list of categories. |
deprecated | boolean (deprecated) Default: false Declares that the specified entity is deprecated with the potential to be removed in any of the next versions. It should be transitioned out of usage as soon as possible and users should refrain from using it in new implementations. |
experimental | boolean (experimental) Default: false Declares that the specified entity is experimental, which means that it is likely to change or may produce unpredictable behaviour. Users should refrain from using it in production, but still feel encouraged to try it out and give feedback. |
object (Process Exceptions) Declares exceptions (errors) that might occur during execution of this process. This list is just for informative purposes and may be incomplete. This list MUST only contain exceptions that stop the execution of a process and MUST NOT contain warnings, notices or debugging messages. It is meant to primarily contain errors that have been caused by the user. It is RECOMMENDED that exceptions are referred to and explained in process or parameter descriptions. The keys define the error code and MUST match the following pattern:
| |
Array of objects (Process Example) Examples, may be used for unit tests. | |
Array of objects (Link) Links related to this process, e.g. additional external documentation. It is RECOMMENDED to provide links with the following
For additional relation types see also the lists of common relation types. | |
required | object (Process Graph) A process graph defines a graph-like structure as a connected set of executable processes. Each key is a unique identifier (node ID) that is used to refer to the process in the graph. |
A user-defined process that computes the EVI.
{- "id": "evi",
- "summary": "Enhanced Vegetation Index",
- "description": "Computes the Enhanced Vegetation Index (EVI). It is computed with the following formula: `2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)`.",
- "parameters": [
- {
- "name": "red",
- "description": "Value from the red band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "blue",
- "description": "Value from the blue band.",
- "schema": {
- "type": "number"
}
}, - {
- "name": "nir",
- "description": "Value from the near infrared band.",
- "schema": {
- "type": "number"
}
}
], - "returns": {
- "description": "Computed EVI.",
- "schema": {
- "type": "number"
}
}, - "process_graph": {
- "sub": {
- "process_id": "subtract",
- "arguments": {
- "x": {
- "from_parameter": "nir"
}, - "y": {
- "from_parameter": "red"
}
}
}, - "p1": {
- "process_id": "multiply",
- "arguments": {
- "x": 6,
- "y": {
- "from_parameter": "red"
}
}
}, - "p2": {
- "process_id": "multiply",
- "arguments": {
- "x": -7.5,
- "y": {
- "from_parameter": "blue"
}
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_parameter": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "x": {
- "from_node": "sub"
}, - "y": {
- "from_node": "sum"
}
}
}, - "p3": {
- "process_id": "multiply",
- "arguments": {
- "x": 2.5,
- "y": {
- "from_node": "div"
}
}, - "result": true
}
}
}
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Deletes the data related to this user-defined process, including its process graph.
Does NOT delete jobs or services that reference this user-defined process.
process_graph_id required | string (process_id) ^\w+$ Example: ndvi Per-user unique identifier for a user-defined process. |
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
OPTIONAL. On-demand access to data using other web service protocols (e.g., OGC API - Tiles / Maps).
Lists supported secondary web service protocols such as OGC WMS, OGC WCS, OGC API - Features or XYZ tiles. The response is an object of all available secondary web service protocols with their supported configuration settings and expected process parameters.
from_parameter
reference) in the user-defined process that is used to compute web service
results.
The appropriate arguments MUST be provided to the user-defined process,
usually at runtime from the context of the web service,
For example, a map service such as a WMS would
need to inject the spatial extent into the user-defined process so that the
back-end can compute the corresponding tile correctly.To improve interoperability between back-ends common names for the services SHOULD be used, e.g. the abbreviations used in the official OGC Schema Repository for the respective services.
Service names MUST be accepted in a case insensitive manner throughout the API.
{- "WMS": {
- "title": "OGC Web Map Service",
- "configuration": {
- "version": {
- "type": "string",
- "description": "The WMS version offered to consumers of the service.",
- "default": "1.3.0",
- "enum": [
- "1.1.1",
- "1.3.0"
]
}
}, - "process_parameters": [
- {
- "name": "layer",
- "description": "The layer name.",
- "schema": {
- "type": "string"
}, - "default": "roads"
}, - {
- "name": "spatial_extent",
- "description": "A bounding box in WGS84.",
- "schema": {
- "type": "object",
- "required": [
- "west",
- "south",
- "east",
- "north"
], - "properties": {
- "west": {
- "description": "West (lower left corner, coordinate axis 1).",
- "type": "number"
}, - "south": {
- "description": "South (lower left corner, coordinate axis 2).",
- "type": "number"
}, - "east": {
- "description": "East (upper right corner, coordinate axis 1).",
- "type": "number"
}, - "north": {
- "description": "North (upper right corner, coordinate axis 2).",
- "type": "number"
}
}
}
}
], - "links": [
- {
- "rel": "about",
- "title": "OGC Web Map Service Standard"
}
]
}, - "OGCAPI-FEATURES": {
- "title": "OGC API - Features",
- "description": "Exposes a OGC API - Features in version 1.0 of the specification (successor of OGC WFS 3.0).",
- "configuration": {
- "title": {
- "type": "string",
- "description": "The title for the OGC API - Features landing page"
}, - "description": {
- "type": "string",
- "description": "The description for the OGC API - Features landing page"
}, - "conformsTo": {
- "type": "array",
- "description": "The OGC API - Features conformance classes to enable for this service.\n\n`http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core` is always enabled.",
}
}, - "process_parameters": [ ],
- "links": [
- {
- "rel": "about",
- "title": "OGC Web Feature Service Standard"
}
]
}
}
Lists all secondary web services submitted by a user.
It is strongly RECOMMENDED to keep the response size small by omitting
all optional non-scalar values (i.e. arrays and objects) from objects in services
(i.e. the process
, configuration
and attributes
properties).
To get the full metadata for a secondary web service clients MUST
request GET /services/{service_id}
.
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "services": [
- {
- "id": "wms-a3cca9",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "type": "wms",
- "enabled": true,
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "configuration": {
- "version": "1.3.0"
}, - "attributes": {
- "layers": [
- "ndvi",
- "evi"
]
}, - "created": "2017-01-01T09:32:12Z",
- "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
}, - "log_level": "warning"
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}
Creates a new secondary web service such as a OGC WMS, OGC WCS, OGC API - Features or XYZ tiles.
The secondary web service SHOULD process the underlying
data on demand, based on process parameters provided to the
user-defined process (through from_parameter
references) at run-time,
for example for the spatial/temporal extent, resolution, etc.
The available process parameters are specified per
service type at GET /service_types
.
Note: Costs incurred by shared secondary web services are usually paid by the owner, but this depends on the service type and whether it supports charging fees or not.
The base data for the secondary web service to create
title | string or null (eo_title) A short description to easily distinguish entities. |
description | string or null <commonmark> (eo_description) Detailed multi-line description to explain the entity. CommonMark 0.29 syntax MAY be used for rich text representation. |
required | object (Process Graph with metadata) A process graph, optionally enriched with process metadata. |
type required | string (service_type) Definition of the service type to access result data. All available service types can be retrieved via |
enabled | boolean Default: true Describes whether a secondary web service is responding to requests (true) or not (false). Disabled services don't produce any costs. |
configuration | object (Service Configuration) Map of configuration settings, i.e. the setting names supported by the secondary web service combined with actual values. See |
log_level | string (min_log_level_default) Default: "info" Enum: "error" "warning" "info" "debug" The minimum severity level for log entries that the back-end stores for the processing request. The order of the levels is as follows (from low to high severity): The default minimum log level is |
property name* additional property | any You can add additional back-end specific properties here. |
{- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "type": "wms",
- "enabled": true,
- "configuration": {
- "version": "1.3.0"
}, - "log_level": "warning",
- "property1": null,
- "property2": null
}
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Modifies an existing secondary web service at the back-end, but maintain the identifier. Changes can be grouped in a single request.
User have to create a new service to change the service type.
service_id required | string (service_id) ^[\w\-\.~]+$ Example: wms-a3cca9 Identifier of the secondary web service. |
The data to change for the specified secondary web service.
title | string or null (eo_title) A short description to easily distinguish entities. |
description | string or null <commonmark> (eo_description) Detailed multi-line description to explain the entity. CommonMark 0.29 syntax MAY be used for rich text representation. |
object (Process Graph with metadata) A process graph, optionally enriched with process metadata. | |
enabled | boolean (service_enabled) Describes whether a secondary web service is responding to requests (true) or not (false). Disabled services don't produce any costs. |
configuration | object (Service Configuration) Map of configuration settings, i.e. the setting names supported by the secondary web service combined with actual values. See |
log_level | string (min_log_level_update) Enum: "error" "warning" "info" "debug" Updates the minimum severity level for log entries that the back-end stores for the processing requests. The back-end doesn't need to update existing log entries. |
{- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "enabled": true,
- "configuration": {
- "version": "1.3.0"
}, - "log_level": "warning"
}
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Lists all information about a secondary web service.
service_id required | string (service_id) ^[\w\-\.~]+$ Example: wms-a3cca9 Identifier of the secondary web service. |
{- "id": "wms-a3cca9",
- "title": "NDVI based on Sentinel 2",
- "description": "Deriving minimum NDVI measurements over pixel time series of Sentinel 2",
- "type": "wms",
- "enabled": true,
- "process": {
- "id": "ndvi",
- "summary": "string",
- "description": "string",
- "parameters": [
- {
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}, - "name": "string",
- "description": "string",
- "optional": false,
- "deprecated": false,
- "experimental": false,
- "default": null
}
], - "returns": {
- "description": "string",
- "schema": {
- "subtype": "string",
- "deprecated": false,
- "type": "array",
- "pattern": "/regex/",
- "enum": [
- null
], - "minimum": 0,
- "maximum": 0,
- "minItems": 0,
- "maxItems": 0,
- "items": [
- { }
], - "property1": null,
- "property2": null
}
}, - "categories": [
- "string"
], - "deprecated": false,
- "experimental": false,
- "exceptions": {
- "Error Code1": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}, - "Error Code2": {
- "description": "string",
- "message": "The value specified for the process argument '{argument}' in process '{process}' is invalid: {reason}",
- "http": 400
}
}, - "examples": [
- {
- "title": "string",
- "description": "string",
- "arguments": {
- "property1": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}, - "property2": {
- "from_parameter": null,
- "from_node": null,
- "process_graph": null
}
}, - "returns": null
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
], - "process_graph": {
- "dc": {
- "process_id": "load_collection",
- "arguments": {
- "id": "Sentinel-2",
- "spatial_extent": {
- "west": 16.1,
- "east": 16.6,
- "north": 48.6,
- "south": 47.2
}, - "temporal_extent": [
- "2018-01-01",
- "2018-02-01"
]
}
}, - "bands": {
- "process_id": "filter_bands",
- "description": "Filter and order the bands. The order is important for the following reduce operation.",
- "arguments": {
- "data": {
- "from_node": "dc"
}, - "bands": [
- "B08",
- "B04",
- "B02"
]
}
}, - "evi": {
- "process_id": "reduce",
- "description": "Compute the EVI. Formula: 2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE)",
- "arguments": {
- "data": {
- "from_node": "bands"
}, - "dimension": "bands",
- "reducer": {
- "process_graph": {
- "nir": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 0
}
}, - "red": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 1
}
}, - "blue": {
- "process_id": "array_element",
- "arguments": {
- "data": {
- "from_parameter": "data"
}, - "index": 2
}
}, - "sub": {
- "process_id": "subtract",
- "arguments": {
- "data": [
- {
- "from_node": "nir"
}, - {
- "from_node": "red"
}
]
}
}, - "p1": {
- "process_id": "product",
- "arguments": {
- "data": [
- 6,
- {
- "from_node": "red"
}
]
}
}, - "p2": {
- "process_id": "product",
- "arguments": {
- "data": [
- -7.5,
- {
- "from_node": "blue"
}
]
}
}, - "sum": {
- "process_id": "sum",
- "arguments": {
- "data": [
- 1,
- {
- "from_node": "nir"
}, - {
- "from_node": "p1"
}, - {
- "from_node": "p2"
}
]
}
}, - "div": {
- "process_id": "divide",
- "arguments": {
- "data": [
- {
- "from_node": "sub"
}, - {
- "from_node": "sum"
}
]
}
}, - "p3": {
- "process_id": "product",
- "arguments": {
- "data": [
- 2.5,
- {
- "from_node": "div"
}
]
}, - "result": true
}
}
}
}
}, - "mintime": {
- "process_id": "reduce",
- "description": "Compute a minimum time composite by reducing the temporal dimension",
- "arguments": {
- "data": {
- "from_node": "evi"
}, - "dimension": "temporal",
- "reducer": {
- "process_graph": {
- "min": {
- "process_id": "min",
- "arguments": {
- "data": {
- "from_parameter": "data"
}
}, - "result": true
}
}
}
}
}, - "save": {
- "process_id": "save_result",
- "arguments": {
- "data": {
- "from_node": "mintime"
}, - "format": "GTiff"
}, - "result": true
}
}
}, - "configuration": {
- "version": "1.3.0"
}, - "attributes": {
- "layers": [
- "ndvi",
- "evi"
]
}, - "created": "2017-01-01T09:32:12Z",
- "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
}, - "log_level": "warning"
}
Deletes all data related to this secondary web service. Computations are stopped, computed results are deleted and access to this is not possible any more. This service won't generate additional costs.
service_id required | string (service_id) ^[\w\-\.~]+$ Example: wms-a3cca9 Identifier of the secondary web service. |
{- "id": "550e8400-e29b-11d4-a716-446655440000",
- "code": "SampleError",
- "message": "Parameter 'sample' is missing.",
}
Lists log entries for the secondary service, usually for debugging purposes.
Back-ends can log any information that may be relevant for a user. Users can log information during data processing using respective processes such as inspect
.
If requested consecutively while the secondary service is enabled, it is RECOMMENDED that clients use the offset parameter to get only the entries they have not received yet.
While pagination itself is OPTIONAL, the offset
parameter is REQUIRED to be implemented by back-ends.
service_id required | string (service_id) ^[\w\-\.~]+$ Example: wms-a3cca9 Identifier of the secondary web service. |
offset | string Example: offset=log1234 The last identifier (property |
level | string Default: "info" Enum: "error" "warning" "info" "debug" Example: level=error The minimum severity level for log entries that the back-end returns. The order of the levels is as follows (from low to high severity): The default minimum log level is |
limit | integer >= 1 Example: limit=10 This parameter enables pagination for the endpoint and specifies the maximum number of
elements that arrays in the top-level object (e.g. collections, processes, batch jobs,
secondary services, log entries, etc.) are allowed to contain.
The Pagination is OPTIONAL: back-ends or clients may not support it. Therefore it MUST be implemented in a way that clients not supporting pagination get all resources regardless. Back-ends not supporting pagination MUST return all resources. If the response is paginated, the |
{- "level": "error",
- "logs": [
- {
- "id": "1",
- "code": "SampleError",
- "level": "error",
- "message": "Can't load the UDF file from the URL `https://geodatacube.example/invalid/file.txt`. Server responded with error 404.",
- "time": "2019-08-24T14:15:22Z",
- "data": null,
- "path": [
- {
- "node_id": "runudf1",
- "process_id": "ndvi",
- "namespace": null,
- "parameter": "udf"
}
], - "usage": {
- "cpu": {
- "value": 40668,
- "unit": "cpu-seconds"
}, - "duration": {
- "value": 2611,
- "unit": "seconds"
}, - "memory": {
- "value": 108138811,
- "unit": "mb-seconds"
}, - "network": {
- "value": 0,
- "unit": "kb"
}, - "storage": {
- "value": 55,
- "unit": "mb"
}
},
}
], - "links": [
- {
- "rel": "related",
- "type": "text/html",
- "title": "Example title"
}
]
}