Search catalog items
The searchCatalogItems
endpoint provides an alternative to the listCatalogItems
operation for accessing the contents of the ICEYE public catalog, following the STAC API - Item Search specification.
This endpoint supports the POST
request method, as recommended in the specification, and enables an advanced query syntax based on the STAC API - Query Extension Specification.
Avoid caching item IDs for long periods. Catalog images are liable to be reprocessed from time to time, making the item IDs invalid. For longer term storage, we recommend caching the corresponding frame ID (available from the |
Optional parameters
Paginated results
When a cursor
property appears in the response, it indicates that more results are available.
To access the next page of results, send a follow-up request with the cursor
query parameter to the GET /catalog/v1/items
endpoint (not the POST /catalog/v1/search
endpoint).
The steps for accessing paginated results from a catalog search are, as follows:
-
Search the catalog by invoking the
POST /catalog/v1/search
endpoint. -
If the number of search results exceeds the
limit
value, acursor
value is returned in the response. -
To get the remaining results, send a request to
GET /catalog/v1/items
with the given cursor value:curl -G "${API_BASE_URL}/api/catalog/v1/items" \ --header "Accept: application/json, application/problem+json" \ --header "Authorization: Bearer ${API_ACCESS_TOKEN}" \ --data-urlencode "cursor=XXXXXXXXXX" \ --data-urlencode "limit=20"
-
Repeat sending requests to
GET /catalog/v1/items
with successive cursor values until all the results have been retrieved.
By default, up to 10 catalog items are returned in each response and this limit can be customized by setting the limit
query parameter.
It is not possible to retrieve paginated results directly from the /catalog/v1/search endpoint.
|
Filtering by STAC metadata query
You can perform advanced filtering of results from the searchCatalogItems
operation using the query
attribute in the JSON request body (as defined by the STAC API - Query Extension Specification).
The query
attribute is defined as a JSON Object, with the following syntax:
{
"query": {
"PROPERTY_NAME": {
"OPERATOR": VALUE
}
}
}
Where PROPERTY_NAME
is the name of a STAC item property, which gets filtered by one or more OPERATOR
/VALUE
pairs, using the following operators:
Operator | Description |
---|---|
|
Filter for property values equal to the specified |
|
Filter for property values not equal to the specified |
|
Filter for property values less than the specified |
|
Filter for property values less than or equal to the specified |
|
Filter for property values greater than the specified |
|
Filter for property values greater than or equal to the specified |
|
Filter for property values that start with the specified string |
|
Filter for property values end with the specified string |
|
Filter for property values that contain the specified |
|
Filter for property values listed in |
You can filter on the following properties in a metadata query
(where this list can be expanded over time):
Property name | Description |
---|---|
|
The time when the satellite started to acquire the image (specified in RFC 3339 date-time format). |
|
The time when the satellite finished acquiring the image (specified in RFC 3339 date-time format). |
|
The imaging mode used to acquire the image. |
|
The sensor acquisition mode used to acquire the image (for example, |
|
The product types available for the STAC item. |
|
The observation direction at the time of image acqusition ( |
|
The pass direction at the time of image acquisition ( |
|
The incidence angle at the time of image acquisition. |
|
The look angle at the time of image acquisition. |
Instrument mode
The instrument mode describes the physical configuration of the satellite sensor that was used to acquire the image.
Because each imaging mode requires a particular sensor configuration, there is a direct correspondence between the instrument_mode
property values and the image_mode
property values, as shown in this table.
Instrument mode / instrument_mode |
Imaging mode / image_mode |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
Enter the following curl
command, remembering to replace the ${VARNAME}
variables with the appropriate values:
curl --location "${API_BASE_URL}/api/catalog/v1/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json, application/problem+json" \
--header "Authorization: Bearer ${API_ACCESS_TOKEN}" \
--data '{
"query": {
"start_time": {
"gte": "2021-02-12T00:00:00Z",
"lte": "2021-03-18T12:31:12Z"
},
"orbit_state": {
"startsWith": "asc"
},
"product_type": {
"in": [
"SLC",
"GRD"
]
},
"instrument_mode": {
"in": [
"SC",
"TOPSAR"
]
}
}
}'
Filtering by ID
If you already have the IDs for some catalog items (for example, IDs from a previous query), you can request those specific items by setting the ids
query parameter to a comma-separated list of IDs.
Enter the following curl
command, remembering to replace the ${VARNAME}
variables with the appropriate values:
curl --location "${API_BASE_URL}/api/catalog/v1/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json, application/problem+json" \
--header "Authorization: Bearer ${API_ACCESS_TOKEN}" \
--data '{
"ids": [
"3aa6aafd94b78c26db9345e426147a7e9ce2ea121d5a28846ccb845c03098c6784268f100ad5eb8218c5421802b0f638ffce9e5b426a85e9affc1fb11cc55079639268784102e3242f9b66",
"11c31b9b3532e61e8d4de6196480865775785a227e9e73eb3c978e0faf4e45871ed7a9d4ab5d05512978dffe8d488caeea3dbe465928c04bee5676ef34c9acaee39bf3c3a2ff30058a7af6"
]
}'
Filtering by bounding box
A bounding box is a standard way of specifying a geospatial coordinate range, as defined in GeoJSON RFC 7946. When you query the catalog, you can specify a bounding box to filter the results. Only those GeoJSON features that have a geometry intersecting the bounding box will then be returned in the response.
The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):
-
South-west corner, longitude
-
South-west corner, latitude
-
Minimum value, elevation (optional)
-
North-east corner, longitude
-
North-east corner, latitude
-
Maximum value, elevation (optional)
The coordinate reference system of the values is WGS 84 longitude/latitude.
In most cases, the values in a bounding box are specified in the order: minimum longitude, minimum latitude, maximum longitude, 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 (elevation) is included, the third and the sixth numbers are the bottom and the top of the 3-dimensional bounding box.
If a GeoJSON 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.
For example, the bounding box of the New Zealand Exclusive Economic Zone in WGS 84 coordinates (from 160.6°E to 170°W and from 55.95°S to 25.89°S) would be represented in JSON as [160.6, -55.95, -170, -25.89]
and in a query parameter as bbox=160.6,-55.95,-170,-25.89
.
Enter the following curl
command, remembering to replace the ${VARNAME}
variables with the appropriate values:
curl --location "${API_BASE_URL}/api/catalog/v1/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json, application/problem+json" \
--header "Authorization: Bearer ${API_ACCESS_TOKEN}" \
--data '{
"bbox": [
-5,
28,
56,
44
]
}'
Filtering by date-time range
When you query the catalog, you can specify a date-time range to filter the results. Only those GeoJSON features with a temporal property that intersects the specified date-time range will be returned in the response.
Date and time (date-time) expressions follow RFC 3339.
A date-time range can be specified in any of the following formats (using /
to indicate an interval and ..
to indicate an open range):
Date-time range | Description |
---|---|
|
A specific date-time |
|
A closed interval |
|
An open interval, with open end time |
|
An open interval, with open start time |
Enter the following curl
command, remembering to replace the ${VARNAME}
variables with the appropriate values:
curl --location "${API_BASE_URL}/api/catalog/v1/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json, application/problem+json" \
--header "Authorization: Bearer ${API_ACCESS_TOKEN}" \
--data '{
"datetime": "2021-02-12T00:00:00Z/2021-03-18T12:31:12Z"
}'
Sorting results
You can sort the results returned by the searchCatalogItems
operation by specifying the sortby
attribute in the JSON request body (as defined by the STAC API - Sort Extension Specification).
The sortby
attribute is specified as an array of sorting conditions, with the following syntax:
{
"sortby": [
{
"field": "PROPERTY_NAME",
"direction": "DIRECTION"
}
]
}'
Where PROPERTY_NAME
is the name of a STAC item property and DIRECTION
can either be asc
(for ascending order) or desc
(for descending order).
Enter the following curl
command, remembering to replace the ${VARNAME}
variables with the appropriate values:
curl --location "${API_BASE_URL}/api/catalog/v1/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json, application/problem+json" \
--header "Authorization: Bearer ${API_ACCESS_TOKEN}" \
--data '{
"bbox": [
-5,
28,
56,
44
],
"datetime": "2021-02-12T00:00:00Z/2021-03-18T12:31:12Z",
"sortby": [
{
"field": "properties.product_type",
"direction": "asc"
},
{
"field": "id",
"direction": "desc"
}
]
}'
Example
Request
Enter the following curl
command, remembering to replace the ${VARNAME}
variables with the appropriate values:
curl --location "${API_BASE_URL}/api/catalog/v1/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json, application/problem+json" \
--header "Authorization: Bearer ${API_ACCESS_TOKEN}" \
--data '{
"bbox": [
-5,
28,
56,
44
],
"datetime": "2021-02-12T00:00:00Z/2021-03-18T12:31:12Z",
"ids": [],
"limit": 10,
"query": {
"start_time": {
"gte": "2021-02-12T00:00:00Z",
"lte": "2021-03-18T12:31:12Z"
},
"orbit_state": {
"startsWith": "asc"
},
"product_type": {
"in": [
"SLC",
"GRD"
]
}
},
"sortby": [
{
"field": "properties.product_type",
"direction": "asc"
},
{
"field": "id",
"direction": "desc"
}
]
}'