Getting Started
Data Cosmos provides access to the data catalogue through an API. This section provides a guide to the key API tools (incluing code snippets in both Bash and Python languages) to get you started with the DataCosmos API.
NOTE
The python examples will require the requests library
SpatioTemporal Asset Catalogs - STAC
The Data Cosmos catalogue archive maintains SpatioTemporal Asset Catalog (STAC) standards. This allows users to search all of Data Cosmos collections using a set of key query parameters. Click here for more information on our STAC configuration.
Search Collections
Requesting all available Collections is very simple, this can be useful when initially exploring via the API in order to see what kind of data is available to you.
Bash
curl --request GET "https://app.open-cosmos.com/api/data/v0/stac/collections" \
--header "Content-Type: application/json"
--header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}"
Python
import requests
# Get bearer token and add to session
response = session.get("https://app.open-cosmos.com/api/data/v0/stac/collections")
print(response.json())
Search Items in a Collection
Once you have found a Collection that you are interested in, you can search through all the Items contained within the Collection.
The search endpoint allows a user to specify a Collection in the collections query parameter.
Search parameters as query parameters are usually in the URL after a question mark.
This example will return a list of items from the specified Collection contained within a bounding box. If there are more results then the limit then the results will be paginated.
The different query parameter options can be found in the Search API documentation.
Bash
curl --request GET "https://app.open-cosmos.com/api/data/v0/stac/search?collections=mantis-l1d-cogs&bbox=160.6,-55.95,-170,-25.89&limit=100/2021-03-18T12:31:12Z" \
--header "Content-Type: application/json" --header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}"
Python
import requests
# Get bearer token and add to session
params = {
"collections": "mantis-l1d-cogs",
"bbox": [160.6, -55.95, -170, -25.89],
"limit": 100,
}
response = session.get("https://app.open-cosmos.com/api/data/v0/stac/search", params=params)
print(response.json())
Advanced Search Items in a Collection
The search endpoint also allows the user to perform an advanced search. This request uses the same endpoint but, allows the user to specify search parameters in the body of a HTTP POST request rather than the URL.
The body of the request supports all the same parameters defined in the URL of the GET request, and their definitions can be found in the Search API documentation.
In addition the body also allows the user to specify an advanced query within query field of the body.
The query syntax follows the Common Query Language (CQL) defined in the OGC Features API specification.
In this example the search is looking for all Items within a given bounding box that has a cloud coverage of less than 20%.
Bash
curl --request POST "https://app.open-cosmos.com/api/data/v0/stac/search" \
--header "Content-Type: application/json" --header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}" \
--data-raw '{
"bbox": [
-71.71875,-27.683528083787767,-71.015625,-27.05912578437406
],
"query":{
"eo:cloudcover":{
"lte": 20
}
}
}'
Python
import requests
# Get bearer token and add to session
body = {
"bbox": [-71.71875,-27.683528083787767,-71.015625,-27.05912578437406],
"query": {
"eo:cloudcover": {
"lte": 20,
},
},
}
response = session.post("http://app.open-cosmos.com/api/data/v0/stac/", json=body)
print(response.json())
Working with Project Items
If you have access to a specific project, you can retrieve and search for items within that project using dedicated endpoints. These endpoints behave similarly to the regular STAC collection endpoints but are specific to project data.
Get all Items from a Project
To obtain a complete list of items from a project, you can use the project-specific items endpoint. This endpoint supports pagination just like the standard collection endpoint.
Bash
curl --request GET "https://app.open-cosmos.com/api/data/v0/scenario/scenario/YOUR-PROJECT-ID/items" \
--header "Content-Type: application/json" --header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}"
Python
import requests
# Get bearer token and add to session
project_id = "YOUR-PROJECT-ID"
response = session.get(f"https://app.open-cosmos.com/api/data/v0/scenario/scenario/{project_id}/items")
print(response.json())
Search for Items in a Project
To find specific items within a project, such as the newest items, you can use the project search endpoint. Currently, this endpoint only accepts the POST method and allows you to filter by various parameters including dates.
Bash
curl --request POST "https://app.open-cosmos.com/api/data/v0/scenario/scenario/YOUR-PROJECT-ID/search" \
--header "Content-Type: application/json" --header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}" \
--data-raw '{
"datetime": "2023-01-01T00:00:00Z/2023-12-31T23:59:59Z"
}'
Python
import requests
# Get bearer token and add to session
project_id = "YOUR-PROJECT-ID"
body = {
"datetime": "2023-01-01T00:00:00Z/2023-12-31T23:59:59Z"
}
response = session.post(f"https://app.open-cosmos.com/api/data/v0/scenario/scenario/{project_id}/search", json=body)
print(response.json())
Get an Item
A single Item can be returned from the API when the ID of the Item is provided. This is useful for when you want to store a reference to the Item and query it again later.
Bash
curl --request POST "https://app.open-cosmos.com/api/data/v0/stac/collections/mantis-l1d-cogs/items/MANTIS_L1D_000000_20211001000000_20211001101010_E274" \
--header "Content-Type: application/json" --header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}"
Python
import requests
# Get bearer token and add to session
collection = "mantis-l1d-cogs"
item = "MANTIS_L1D_000000_20211001000000_20211001101010_E274"
response = session.get(f"https://app.open-cosmos.com/api/data/v0/stac/collections/{collection}/items/{item}")
print(response.json())
Checking Item Access Permissions
When retrieving items from either the catalog or a project (whether through search or listing), each item contains a property that indicates whether you have full access to its high-resolution assets:
opencosmos:high_resolution_read_permission: A boolean value wheretrueindicates that the user or API key making the request has full access to all assets, whilefalseindicates limited access.
To check this property in an item response:
import requests
# Get bearer token and add to session
collection = "mantis-l1d-cogs"
item = "MANTIS_L1D_000000_20211001000000_20211001101010_E274"
response = session.get(f"https://app.open-cosmos.com/api/data/v0/stac/collections/{collection}/items/{item}")
item = item_response.json()
has_full_access = item.get("properties", {}).get("opencosmos:high_resolution_read_permission", False)
print(f"Has full access to high-resolution assets: {has_full_access}")
Download Assets from an Item
The assets field of the Item contains links to all the source data contained within the asset. Each Asset object contains a set of standard fields to describe the data it contains.
The most relevant field here is the href field that provides a link to the source data to be downloaded.
This example gets a specific item and downloads all the assets to local storage with the same name as the title of the asset.
Bash
curl --request POST "https://app.open-cosmos.com/api/data/v0/stac/collections/mantis-l1d-cogs/items/MANTIS_L1D_000000_20211001000000_20211001101010_E274" \
--header "Content-Type: application/json" --header "Authorization: Bearer ${DATACOSMOS_ACCESS_TOKEN}"
Python
import requests
# Get bearer token and add to session
collection = "mantis-l1d-cogs"
item = "MANTIS_L1D_000000_20211001000000_20211001101010_E274"
response = session.get(f"https://app.open-cosmos.com/api/data/v0/stac/collections/{collection}/items/{item}")
item = response.json()
for _, asset in item["assets"].items():
asset_content = session.get(asset["href"])
with open(asset["title"], "wb") as fp:
fp.write(asset_content.content)
Tasking
Users can utilise the OpenApp Satellite tasking API to query scheduled tasking requests and future tasking opportunities over a given geographic area. Click here to find out more about OpenApp Satellite tasking API.
Creating applications for DataCosmos
Developers can get in touck with Open Cosmos at datacosmos-help@open-cosmos.com if they wish to make their applications available through DataCosmos. Once that is done, the developer will have to prepare the application as described in the Dockerising an Application for DataCosmos guide.
Where to Next
| Authentification →