The Tasking API supports data procurement by assessing the feasibility of, and planning future capture through various suppliers
This typically consists of the following workflow:
- search for available capacities
- obtains a feasibility study for that capacity
- obtain a quote for the capability (optional)
- order the capability
- await capture fulfillment
Each of these steps has a corresponding endpoint to provide the necessary information, with the primary interface based on the STAC API Standard.
Search
Searching follows the convention of STAC collection searches, with support for a limited subset of the filter extension to ensure consistency between upstream data sources for which not all operations are available.
Search is available as a GET or POST operation against the /api/tasking/search endpoint.
Search parameters MUST be provided, and the endpoint accepts the following schema
Request
Body
| Key | Description |
|---|---|
| bbox | The bounding box that results must intersect (will be ignored if intersects is instead provided) |
| collections | The collections to query results from. |
| datetime | The date range for results to be within to satisfy this query, separated by a `/`. Dates should be formatted according to RFC3339 (conventional JSON encoding). |
| filter | Further parameter filters to restrict results. The root operation can be `and` or any other supported query. At this time, not all properties are supported for filters, and they are defined below. |
| ids | The list of result IDs to retrieve, will override all other parameters and only return items from this list. |
| intersects | The GeoJSON Geometry that results must intersect (or contain) |
| limit | The limit on the number of results to return. |
Supported Filter Properties
Coming Soon
This section is coming soon
Example:
{
"collections": [
"landsat"
],
"datetime": "2026-05-12T05:12:44Z/2026-07-02T18:24:32Z",
"filter": {
"args": [
{
"args": [
{
"property": "properties.gsd"
},
0.8
],
"op": "\u003c="
},
{
"args": [
{
"property": "properties.view:off_nadir"
},
3
],
"op": "\u003e="
}
],
"op": "and"
},
"intersects": {
"coordinates": [
[
[
151.2142512,
-33.855988
],
[
151.21637,
-33.8561709
],
[
151.2163022,
-33.8583387
],
[
151.2146072,
-33.8585076
],
[
151.2137766,
-33.8575926
],
[
151.2142512,
-33.855988
]
]
],
"type": "Polygon"
}
}
Response
The response will contain a list of STAC Items representing capture capacities estimated to be available and pending a full feasibility study.
Body
| Key | Description |
|---|---|
| features | The list of results |
| links | Links to related resources, such as pagination and related endpoints |
| stac_extensions | The extension schemas used in this result list |
| stac_version | The version of the STAC standard these results conform to |
| timestamp | Timestamp of these results generation |
| type | GeoJSON and STAC type attribute Will always be "FeatureCollection" |
Feature result STAC Items
| Key | Description |
|---|---|
| collection | The collection this result belongs to, typically its supplier, or a sub-collection thereof |
| geometry | The geometric footprint of the capture plan and its location on the planet. This will be the region ordered with the supplier if placed. Will generally be a Polygon. |
| id | Identifier for this orderable capability, used to identify the result for accessing further information and ordering |
| links | Links to associated information, such as this items details endpoint, or further information about its capture platform (if available) |
| properties | Properties of the capture |
| stac_extensions | The extension schemas used in this individual result |
| stac_version | The version of the STAC standard these results conform to |
| type | GeoJSON and STAC type attribute Will always be "Feature" |
Common Properties
Most results will have the following properties defined by the STAC Common Properties scheme, as well as several standardized extensions.
| Key | Description |
|---|---|
| bands | The spectral bands this capture plan includes |
| constellation | The constellation or platform group that will perform capture |
| datetime | The central date and time of the capture period |
| end_datetime | The end date and time of the capture period |
| instrument_modes | The mode(s) used to be used for capture |
| instrument_type | The type of instrument to be used for capture |
| platform | The individual platform which will perform capture (if singular) |
| platform_type | The type of platform which will perform capture |
| price:cloud_levels | List of cloud level guarantees that determine capture suitability, used to specify acceptance criteria |
| price:currency | The ISO currency code that the unit price is in |
| price:license_options | List of licenses capture can be purchased under |
| price:moq | The minimum quantity of units that an order may consist of, any request for less will be priced at this minimum. |
| price:order_levels | List of order levels capture processing can be purchased for |
| price:priority_options | List of ordering priority levels capture can be ordered under to address request congestion and prioritization |
| price:unit_price | The base unit price of this capture plan, ignoring any coverage based pricing or discounting (see quote endpoint). |
| price:units | The units the pricing is in (i.e. currency/sqkm) |
| providers | The providers of this capture capability |
| start_datetime | The start date and time of the capture period |
| task-feas:captures_required | Estimated number of captures required to obtain coverage of the requested area, in the time period |
| task-feas:estimated_revisits | Estimated number of revisit opportunities that will occur in the time period to facilitate capture(s) |
| task-feas:gsd_range | Range of outcome GSD that will be acceptable for captures |
| task-feas:matches_search | Indicates whether the geometry of capture matches the search geometry, or is newly constructed geometry based on supplier requirements. |
| task-feas:platforms | The list of platforms included in the group that will be tasked to perform capture |
| view-range:azimuth | The range of imaging azimuth angles that are acceptable for capture |
| view-range:off_nadir | The range of off nadir angles that are acceptable for capture |
Example:
{
"features": [
{
"geometry": {
"coordinates": [
[
[
151.23556060248285,
-33.82753939751741
],
[
151.23556060248285,
-33.87706060248259
],
[
151.18603939751716,
-33.87706060248259
],
[
151.18603939751716,
-33.82753939751741
],
[
151.23556060248285,
-33.82753939751741
]
]
],
"type": "Polygon"
},
"id": "84f68eef300719e6b7cb65dc34612d7a",
"links": [
{
"href": "/api/tasking/feasibility/84f68eef300719e6b7cb65dc34612d7a",
"rel": "self",
"type": "application/geo+json"
}
],
"properties": {
"bands": [
{
"eo:center_wavelength": 625,
"eo:full_width_half_max": 350,
"eo:max": 800,
"eo:min": 450,
"name": "Panchromatic"
},
{
"eo:center_wavelength": 480,
"eo:full_width_half_max": 60,
"eo:max": 510,
"eo:min": 450,
"name": "Blue"
},
{
"eo:center_wavelength": 545,
"eo:full_width_half_max": 70,
"eo:max": 580,
"eo:min": 510,
"name": "Green"
},
{
"eo:center_wavelength": 672.5,
"eo:full_width_half_max": 35,
"eo:max": 690,
"eo:min": 655,
"name": "Red"
},
{
"eo:center_wavelength": 850,
"eo:full_width_half_max": 140,
"eo:max": 920,
"eo:min": 780,
"name": "Near infrared"
}
],
"constellation": "sky-scan",
"end_datetime": "2026-10-26T05:17:39.029Z",
"instrument_modes": [
"pushbroom"
],
"instrument_type": "multi-spectral",
"platform_type": "satellite",
"price:cloud_levels": [
{
"description": "Only attempt captures with lower cloud coverage.",
"key": "orbit-view-low",
"loadingAmount": 0,
"loadingPercent": 0,
"max": 30,
"name": "Low"
},
{
"description": "There will be no guarantee on cloud cover.",
"key": "orbit-view-standard",
"loadingAmount": 0,
"loadingPercent": 0,
"max": 100,
"name": "Standard"
}
],
"price:license_options": [
{
"href": "https://creativecommons.org/licenses/by/2.0/legalcode",
"key": "orbit-view-academic",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "Academic Use"
},
{
"href": "https://creativecommons.org/licenses/by/3.0/legalcode",
"key": "orbit-view-general",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "General Use"
}
],
"price:moq": 50,
"price:order_levels": [
{
"key": "orbit-view-L2",
"name": "L2",
"price": 0
}
],
"price:priority_options": [
{
"description": "High",
"key": "orbit-view-high",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "High"
},
{
"description": "Medium",
"key": "orbit-view-medium",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "Medium"
},
{
"description": "Standard",
"key": "orbit-view-standard",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "Standard"
}
],
"price:units": "sqkm",
"providers": [
{
"key": "orbit-view",
"name": "orbit-view",
"roles": [
"producer"
],
"url": ""
}
],
"start_datetime": "2026-09-22T22:17:42.577674677Z",
"task-feas:captures_required": 1,
"task-feas:estimated_revisits": 104,
"task-feas:gsd_range": [
0.25,
0.25
],
"task-feas:matches_search": true,
"task-feas:platforms": [
"skyscan-1",
"skyscan-2",
"skyscan-3",
"skyscan-4",
"skyscan-5",
"skyscan-6",
"skyscan-7",
"skyscan-8",
"skyscan-9",
"skyscan-10",
"skyscan-11",
"skyscan-12",
"skyscan-13",
"skyscan-14",
"skyscan-15",
"skyscan-16"
],
"view-range:azimuth": [
0,
360
],
"view-range:off_nadir": [
0,
30
]
},
"stac_extensions": [
"https://docs.arlula.com/schemas/price/v1.0.0/schema.json",
"https://docs.arlula.com/schemas/task-feas/v1.0.0/schema.json",
"https://stac-extensions.github.io/eo/v2.0.0/schema.json",
"https://stac-extensions.github.io/sar/v1.3.2/schema.json",
"https://stac-extensions.github.io/view/v1.1.0/schema.json"
],
"stac_version": "v1.0.0",
"type": "Feature"
}
],
"links": [],
"numberMatched": 0,
"numberReturned": 0,
"stac_extensions": [
"https://docs.arlula.com/schemas/price/v1.0.0/schema.json",
"https://docs.arlula.com/schemas/task-feas/v1.0.0/schema.json",
"https://stac-extensions.github.io/eo/v2.0.0/schema.json",
"https://stac-extensions.github.io/sar/v1.3.2/schema.json",
"https://stac-extensions.github.io/view/v1.1.0/schema.json"
],
"stac_version": "v1.0.0",
"type": "FeatureCollection"
}
Feasibility
A feasibility study can be conducted for a given capability using its ID.
Please note, as feasibility studies are not a lock in of capability, they can become stale and expire as other orders are placed.
As a result, this endpoint may return a HTTP 410 Gone status if the item has expired.
The feasibility endpoint for each capability is returned as an attached link with the self relation. However, if this link was not retained, it can be accessed via the GET /api/tasking/items/{item id} endpoint.
Where {item id} is the id provided in the original result
This will return a STAC Item containing the details provided at search, in addition to details from the feasibility study
Response
The response will be the details from the search, now expanded with any ancillary details obtained from the supplier feasibility study, including any planned overpasses and capture opportunities.
Body
| Key | Description |
|---|---|
| collection | The collection this result belongs to, typically its supplier, or a sub-collection thereof |
| features | Optional list of overpasses that make up the capability |
| geometry | The geometric footprint of the capture plan and its location on the planet. This will be the region ordered with the supplier if placed. Will generally be a Polygon. |
| id | Identifier for this orderable capability, used to identify the result for accessing further information and ordering |
| links | Links to associated information, such as this items details endpoint, or further information about its capture platform (if available) |
| properties | Properties of the capture |
| stac_extensions | The extension schemas used in this individual result |
| stac_version | The version of the STAC standard these results conform to |
| type | GeoJSON and STAC type attribute Will always be "Feature" |
Overpasses
The feasibility response will, if provided by the supplier, include a list of features that correspond to individual capture opportunities within the campaign plan.
These features are not full GeoJSON Features, and may or may not contain geometry, indicating a specific predicted capture location v a capability to capture under differing conditions in one overpass.
Where an overpass includes an id, that id can be included in an order request to target those capabilities specifically (in cases of preferred and assured tasking).
Properties
| Key | Description |
|---|---|
| end_datetime | End datetime of opportunity overpass |
| eo:cloud_cover | Estimated cloud coverage during overpass (if available) |
| platform | Platform with overpassing opportunity |
| start_datetime | Start datetime of opportunity overpass |
| task-feas:subsatellite | Subsatellite path during overpass (if available) |
| view-range:azimuth | Range of view azimuth angles during overpass |
| view-range:off_nadir | Range of off nadir viewing angles during overpass |
Example:
{
"features": [
{
"id": "MjAyNi0xMC0wOFQyMzo0NDowOVp+c2t5c2Nhbi0x",
"properties": {
"datetime": "2026-10-08T23:44:09.699648472Z",
"end_datetime": "2026-10-08T23:44:46.503847691Z",
"platform": "skyscan-1",
"start_datetime": "2026-10-08T23:43:32.895449254Z",
"task-feas:subsatellite": {
"coordinates": [
[
[
-164.1267481721544,
74.48781547163485
],
[
-167.53918223091407,
72.92437648355641
],
[
-170.40878390203233,
71.31641185013665
],
[
-172.85410712314268,
69.67437852659376
],
[
-174.9640841136029,
68.00579734825826
],
[
-176.8058705125026,
66.31617065707889
],
[
-178.43067747568637,
64.60959251708614
],
[
-179.87799465898158,
62.88915853557653
]
]
],
"type": "MultiLineString"
},
"view-range:azimuth": [
203.813,
7.584
],
"view-range:off_nadir": [
2.571,
30
]
}
}
],
"geometry": {
"coordinates": [
[
[
151.23556060248285,
-33.82753939751741
],
[
151.23556060248285,
-33.87706060248259
],
[
151.18603939751716,
-33.87706060248259
],
[
151.18603939751716,
-33.82753939751741
],
[
151.23556060248285,
-33.82753939751741
]
]
],
"type": "Polygon"
},
"id": "84f68eef300719e6b7cb65dc34612d7a",
"links": [
{
"href": "/api/tasking/feasibility/84f68eef300719e6b7cb65dc34612d7a",
"rel": "self",
"type": "application/geo+json"
}
],
"properties": {
"bands": [
{
"eo:center_wavelength": 625,
"eo:full_width_half_max": 350,
"eo:max": 800,
"eo:min": 450,
"name": "Panchromatic"
},
{
"eo:center_wavelength": 480,
"eo:full_width_half_max": 60,
"eo:max": 510,
"eo:min": 450,
"name": "Blue"
},
{
"eo:center_wavelength": 545,
"eo:full_width_half_max": 70,
"eo:max": 580,
"eo:min": 510,
"name": "Green"
},
{
"eo:center_wavelength": 672.5,
"eo:full_width_half_max": 35,
"eo:max": 690,
"eo:min": 655,
"name": "Red"
},
{
"eo:center_wavelength": 850,
"eo:full_width_half_max": 140,
"eo:max": 920,
"eo:min": 780,
"name": "Near infrared"
}
],
"constellation": "sky-scan",
"end_datetime": "2026-10-26T05:17:39.029Z",
"instrument_modes": [
"pushbroom"
],
"instrument_type": "multi-spectral",
"platform_type": "satellite",
"price:cloud_levels": [
{
"description": "Only attempt captures with lower cloud coverage.",
"key": "orbit-view-low",
"loadingAmount": 0,
"loadingPercent": 0,
"max": 30,
"name": "Low"
},
{
"description": "There will be no guarantee on cloud cover.",
"key": "orbit-view-standard",
"loadingAmount": 0,
"loadingPercent": 0,
"max": 100,
"name": "Standard"
}
],
"price:license_options": [
{
"href": "https://creativecommons.org/licenses/by/2.0/legalcode",
"key": "orbit-view-academic",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "Academic Use"
},
{
"href": "https://creativecommons.org/licenses/by/3.0/legalcode",
"key": "orbit-view-general",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "General Use"
}
],
"price:moq": 50,
"price:order_levels": [
{
"key": "orbit-view-L2",
"name": "L2",
"price": 0
}
],
"price:priority_options": [
{
"description": "High",
"key": "orbit-view-high",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "High"
},
{
"description": "Medium",
"key": "orbit-view-medium",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "Medium"
},
{
"description": "Standard",
"key": "orbit-view-standard",
"loadingAmount": 0,
"loadingPercent": 0,
"name": "Standard"
}
],
"price:units": "sqkm",
"providers": [
{
"key": "orbit-view",
"name": "orbit-view",
"roles": [
"producer"
],
"url": ""
}
],
"start_datetime": "2026-09-22T22:17:42.577674677Z",
"task-feas:captures_required": 1,
"task-feas:estimated_revisits": 104,
"task-feas:gsd_range": [
0.25,
0.25
],
"task-feas:matches_search": true,
"task-feas:platforms": [
"skyscan-1",
"skyscan-2",
"skyscan-3",
"skyscan-4",
"skyscan-5",
"skyscan-6",
"skyscan-7",
"skyscan-8",
"skyscan-9",
"skyscan-10",
"skyscan-11",
"skyscan-12",
"skyscan-13",
"skyscan-14",
"skyscan-15",
"skyscan-16"
],
"view-range:azimuth": [
0,
360
],
"view-range:off_nadir": [
0,
30
]
},
"stac_extensions": [
"https://docs.arlula.com/schemas/price/v1.0.0/schema.json",
"https://docs.arlula.com/schemas/task-feas/v1.0.0/schema.json",
"https://stac-extensions.github.io/eo/v2.0.0/schema.json",
"https://stac-extensions.github.io/sar/v1.3.2/schema.json",
"https://stac-extensions.github.io/view/v1.1.0/schema.json"
],
"stac_version": "v1.0.0",
"type": "Feature"
}
Quote
The Quote endpoint will provide details of the pricing of a given combination of capability, order level, license, priority and cloud_level to allow for accurate pricing of items.
It is available via the GET /api/tasking/quote endpoint.
Request
Body
| Key | Description |
|---|---|
| items | Array of tasking items to be quoted for. |
Quote Items
| Key | Description |
|---|---|
| cloudLevel | The cloud level requirement to purchase under, taken from the `key` property of one of the results `price:cloud_levels` members |
| id | The id of the item to be quoted |
| license | The license to purchase it under, taken from the `href` property of one of the results `price:license_options` members |
| opportunities | Optional list of opportunities to be specifically ordered, obtained as the `id` of entries of the overpass `features` list. |
| orderLevel | The order level to purchase it at, taken from the `key` property of one of the results `price:order_levels` members |
| priority | The priority level to purchase it at, taken from the `key` property of one of the results `price:priority_options` members |
Example:
{
"items": [
{
"cloudLevel": "orbit-view-low",
"id": "84f68eef300719e6b7cb65dc34612d7a",
"license": "orbit-view-general",
"opportunities": [
"MjAyNi0xMC0wOFQyMzo0NDowOVp+c2t5c2Nhbi0x"
],
"orderLevel": "orbit-view-L2",
"priority": "orbit-view-medium"
}
]
}
Response
The response will contain a list of line items quotes, as well as the total pricing for the combined items.
Body
| Key | Description |
|---|---|
| items | The list of items quoted, and their individual line item pricing |
| pricing | Aggregate pricing for the quote request |
Items
| Key | Description |
|---|---|
| id | The ordering ID of the item quoted |
| license | the license quoted under |
| orderLevel | The ordering level quoted at |
| pricing | The pricing quoted for this item |
Example:
{
"items": [
{
"id": "8e68c3188049796a1b275ba6a5d48ede",
"license": "landsat-cc",
"orderLevel": "landsat-default",
"pricing": {
"cloud": 0,
"license": 0,
"orderLevel": 1000,
"priority": 200,
"total": 1200
}
}
],
"pricing": {
"cloud": 0,
"license": 0,
"orderLevel": 1000,
"priority": 200,
"total": 1200
}
}
Order
Ordering tasking items will create an order containing the requested tasking campaigns which can then be managed through the order api.
It is accessed through a call to POST /api/tasking/order
Request
Body
| Key | Description |
|---|---|
| coupon | Coupon to apply to the order |
| emails | Emails to receive status updates for the order and its item |
| items | List of items to be ordered |
| payment | Payment account used for the order (if required) |
| team | Team the order should be added to (will be added to the requester directly if omitted) |
| webhooks | Webhooks to receive status updates for the order and its items |
Order Items
| Key | Description |
|---|---|
| cloud | Key of the cloud level to purchase the capability under, taken from the `key` property of one of the results `price:cloud_levels` members |
| eula | Href of license to purchase the capability under, taken from the `href` property of one of the results `price:license_options` members |
| id | Order id of capability to purchase |
| level | Key of the order level to purchase the capability at, taken from the `key` property of one of the results `price:order_levels` members |
| opportunities | Optional list of opportunities to be specifically ordered, obtained as the `id` of entries of the overpass `features` list. |
| priority | Key of the priority to purchase the capability at, taken from the `key` property of one of the results `price:priority_options` members |
Example:
{
"items": [
{
"cloudLevel": "orbit-view-low",
"id": "84f68eef300719e6b7cb65dc34612d7a",
"license": "orbit-view-general",
"opportunities": [
"MjAyNi0xMC0wOFQyMzo0NDowOVp+c2t5c2Nhbi0x"
],
"orderLevel": "orbit-view-L2",
"priority": "orbit-view-medium"
}
],
"payment": "6912fe74-60d6-458c-b000-9e8854fc440e",
"team": "caf2173a-795e-4c64-bae3-954fa4359955"
}
Response
The response will contain a STAC catalog, containing a STAC Item for each ordered item.
Body
| Key | Description |
|---|---|
| id | ID of the order, used to identify it in all api calls |
| links | List of links to associated resources, including the order itself, and its content tasking campaigns and datasets |
| properties | Properties of the order |
| stac_extensions | The extension schemas used in this result list |
| stac_version | The version of the STAC standard these results conform to |
| title | Title of the order, as it appears in the dashboard |
| type | GeoJSON and STAC type attribute Will always be "Catalog" |
Properties
| Key | Description |
|---|---|
| created | Date and time the order was created at |
| order:date | Date and time the order was created at |
| order:status | Current status of the order |
| paid:amount | Amount (in currency) paid for the order |
| paid:currency | Currency that the amount paid for the order was paid in. |
| updated | Date and time of the most recent update to the order |
Example:
{
"id": "d185277c-8f81-4aa6-9465-aad3f269278c",
"links": [
{
"href": "/api/order/d185277c-8f81-4aa6-9465-aad3f269278c",
"rel": "self",
"title": "This Order",
"type": "application/geo+json"
},
{
"href": "/api/order/d185277c-8f81-4aa6-9465-aad3f269278c/campaigns",
"rel": "child",
"title": "All Order Campaigns",
"type": "application/geo+json"
},
{
"href": "/api/campaign/1de3bfd8-65e6-42f6-8db7-7c7919d895f7",
"rel": "item",
"title": "Campaign",
"type": "application/geo+json"
}
],
"properties": {
"created": "2026-06-02T23:56:37.140218Z",
"order:date": "2026-06-02T23:56:37.140218Z",
"order:status": "complete",
"paid:amount": 85700,
"paid:currency": "USD",
"updated": "2026-06-02T23:56:50.271228Z"
},
"stac_extensions": [
"https://github.com/radiantearth/stac-spec/blob/master/item-spec/json-schema/datetime.json",
"https://stac-extensions.github.io/order/v1.1.0/schema.json",
"https://docs.arlula.com/schemas/paid/v1.0.0/schema.json"
],
"stac_version": "v1.0.0",
"title": "example Tasking order",
"type": "Catalog"
}
Fulfillment and Next Steps
Tasking fulfillment will occur over time as captures happen and fulfill the campaign.
The status of the order as a whole, as well as its contained items can be reviewed through the orders api using
the order get and dataset get endpoints respectively.
This will create new datasets within their respective tasking campaign for each capture, also attaching them to the order.