This guide will walk you through the full process of acquiring satellite imagery and derived products on demand via API endpoints.
About the Feasibility and Tasking API
Ursa Space's Feasibility and Tasking API offers direct access to a powerful network of commercial satellite image providers. Through a single interface, decision makers can capture high resolution imagery and tap into Ursa Space's suite of advanced image processing capabilities.
To order catalog imagery, please refer to the Image Ordering API. Although it offers feasibility and tasking, we recommend using the Feasibility and Tasking API for these needs going forward.
Process Overview
Before diving into the details of each endpoint, it is important to first provide an overview of the end to end process for acquiring geospatial products via the Feasibility and Tasking API. Below is a diagram that highlights the three main steps involved: Feasibility Study, Satellite Tasking, and Product Delivery.
Step 1. Conduct a Feasibility Study
A feasibility study provides decision makers with upcoming opportunities to capture images over their area of interest. Additional constraints may also be specified such as satellite provider, azimuth angle, incidence angle, squint angle, and datetime. Behind the scenes, the Feasibility and Tasking API identifies optimal tasking opportunities by applying specialized algorithms that analyze a range of public and commercial data sources.
Feasibility studies can take several minutes to complete, making it important to design your integration to periodically check for status updates. Please refer to the Get the Status of a Feasibility Request section below for more details.
Step 2. Request a Satellite Tasking
Decision-makers can leverage feasibility insights to precisely craft tasking requests with a strong liklihood of being scheduled. Additional requirements, derived image products, and analytics may also be specified. Upon each request, the Feasibility and Tasking API tasks the associated satellite accordingly.
Feasibility studies are not required for submitting tasking requests, but they can significantly improve the likelihood of a successful scheduling.
Step 3. Products Delivered to a Cloud Storage Bucket
Upon a successful image capture, Ursa Space rapidly processes the image and delivers a product bundle to your desired cloud storage location. Customized notifications and alerts can also be provided if desired.
Accessing the API
The Feasibility and Tasking API can be found at the following URL, and it consists of six endpoints in total.
https://platform.ursaspace.com/api/v1/tfs
- Submit a New Feasibility Request (POST /feasibility)
- Get the Status of a Feasibility Request (GET /feasibility/{id})
- Submit a New Tasking Request (POST /tasking)
- Get the Status of a Tasking Request (GET /tasking/{id})
- List All Tasking Requests (GET /tasking)
- Cancel a Tasking Request (POST /tasking/{id}/cancel)
Requests to the Feasibility and Tasking API require authentication. Please see the Authentication page to learn how to generate bearer tokens. Once a token is generated, it must be included in the Authorization
header of every request using the following format:
Authorization: Bearer <token>
Submit a New Feasibility Request
POST /feasibility
Request Body
Parameter Name | Required | Data Type | Description |
target_lat |
Yes | Number | The target latitude of the feasibility study. Must be between -90 and 90. |
target_lon |
Yes | Number | The target longitude of the feasibility study. Must be between -180 and 180. |
start_datetime |
Yes | String |
The earliest datetime considered. Must be at least 60 minutes in the future and in the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:12:00.000 |
end_datetime |
Yes | String |
The latest datetime considered. Must be within three weeks of the present and in the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-12T15:12:00.000 |
vendor |
No | String |
The vendor to consider. Must be one of the following if provided: UMBRA, CAPELLA, or ICEYE Defaults to all available vendors otherwise. |
incidence_min |
No | Number | The minimum incidence angle to consider. Must be between 0 and 90 if provided. Defaults to 0 otherwise. |
incidence_max |
No | Number | The maximum incidence angle to consider. Must be between 0 and 90 if provided. Defaults to 90 otherwise. |
azimuth_min |
No | Number | The minimum azimuth angle to consider. Must be between 0 and 360 if provided. Defaults to 0 otherwise. |
azimuth_max |
No | Number | The maximum azimuth angle to consider. Must be between 0 and 360 if provided. Defaults to 360 otherwise. |
squint_min |
No | Number | The minimum squint angle to consider. Must be between -90 and 90 if provided. Defaults to -90 otherwise. |
squint_max |
No | Number | The maximum squint angle to consider. Must be between -90 and 90 if provided. Defaults to 90 otherwise. |
Response Body
An instance of Feasibility Request Status as defined in the Schema Reference section.
Get the Status of a Feasibility Request
GET /feasibility/{id}
Response Body
An instance of Feasibility Request Status as defined in the Schema Reference section.
Submit a New Tasking Request
POST /tasking
Request Body
Parameter Name | Required | Data Type | Description |
target_lat |
Yes | Number | The target latitude of the image capture. Must be between -90 and 90. |
target_lon |
Yes | Number | The target longitude of the image capture. Must be between -180 and 180. |
target_datetime |
Yes | String |
The target datetime of the image capture. Must be at least 90 minutes in the future and in the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:12:00.000 |
mode |
Yes | String |
The desired imaging mode. Must be a valid Mode as defined in the Schema Reference section. |
polarization |
No | String |
The polarization of the image capture. Must be one of the following if provided: HH or VV Defaults to VV otherwise. |
tags |
No | List[String] |
A list of custom labels to attach to the tasking request. Defaults to the empty list if not provided. |
Response Body
An instance of Tasking Request Status as defined in the Schema Reference section.
Get the Status of a Tasking Request
GET /tasking/{id}
Response Body
An instance of Tasking Request Status as defined in the Schema Reference section.
List All Tasking Requests
GET /tasking
Query Parameters
Parameter Name | Required | Description |
page |
No | The index of the page to return. Each page consists of at most 10 tasking requests. |
Response Body
Property Name | Description |
tasking_requests |
A list of Tasking Request Status instances as defined in the Schema Reference section sorted by their created_at property in descending order. |
next_page |
The index of the next page if pagination is needed. |
Cancel a Tasking Request
POST /tasking/{id}/cancel
Response Body
An instance of Tasking Request Status as defined in the Schema Reference section
Cancellation is best effort and only available for tasking requests with a status of RECEIVED
or TASKED
. Costs may still be incurred depending on the circumstances. Please see the following pages for more details:
Schema Reference
Feasibility Request Status
Property Name | Always Present | Data Type | Description |
id |
Yes | String | The unique ID of the feasibility request. |
feasibility_request |
Yes | Object | The parameters provided to the /feasibility endpoint when the feasibility study was requested. |
status |
Yes | String | The current status of the feasibility request. |
owner |
Yes | String | The email address of the owner of the feasibility request. |
created_at |
Yes | String |
The datetime when the feasibility study created. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:12:00.000 |
completed_at |
No | String |
The datetime when the feasibility study completed. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:17:00.000 |
tasking_opportunities |
No | List<Object> | A list of Tasking Opportunity instances, if any are available. |
Tasking Request Status
Property Name | Always Present | Data Type | Description |
id |
Yes | String |
The unique ID of the tasking request. |
tasking_request |
Yes | String |
The parameters provided to the /tasking endpoint when the tasking request was created |
status |
Yes | String |
The current status of the tasking request. Always one of the following values: RECEIVED, TASKED, SUCCESSFUL, CANCELED, or UNSUCCESSFUL |
owner |
Yes | String |
The email address of the owner of the tasking request. |
created_at |
Yes | Object |
The datetime when the tasking request was created. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:12:00.000 |
Tasking Opportunity
Property Name | Always Present | Data Type | Description |
geometry |
Yes | Object |
The geospatial coverage of the tasking opportunity. A Geometry instance as defined by the GeoJSON Specification |
vendor |
Yes | String |
The satellite provider. Always one of the following: UMBRA, CAPELLA, or ICEYE |
satellite_id |
Yes | String | The ID of the satellite. |
window_open |
Yes | String |
The datetime of the window opening. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:12:00.000 |
window_close |
Yes | String |
The date time of the window closing. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSS ex: 2024-10-09T15:18:00.000 |
available_modes |
Yes | List<String> | The imaging modes available for this opportunity. Each element in the list is a Mode. |
look_direction |
Yes | String |
The look direction of the satellite. One of the following: LEFT or RIGHT |
grazing_min |
Yes | Number | The minimum grazing angle of this opportunity. |
grazing_max |
Yes | Number | The maximum grazing angle of this opportunity. |
incidence_min |
Yes | Number | The minimum incidence angle of this opportunity. |
incidence_max |
Yes | Number | The maximum incidence angle of this opportunity. |
azimuth_min |
Yes | Number | The minimum azimuth angle of this opportunity. |
azimuth_max |
Yes | Number | The maximum azimuth angle of this opportunity. |
squint_min |
Yes | Number | The minimum squint angle of this opportunity. |
squint_max |
Yes | Number | The maximum squint angle of this opportunity. |
Mode
Vendor | Available Modes | Vendor Resources |
Umbra |
UMBRA_SPOTLIGHT_1M
|
|
Capella |
CAPELLA_SPOTLIGHT_ULTRA |
|
Iceye |
ICEYE_SPOTLIGHT ICEYE_SPOTLIGHT_FINE ICEYE_SPOTLIGHT_EXTENDED_AREA ICEYE_SPOTLIGHT_EXTENDED_DWELL ICEYE_SPOTLIGHT_EXTENDED_DWELL_FINE ICEYE_SCAN ICEYE_STRIPMAP |
Postman Collection
If you are familiar with Postman, a preconfigured collection for the Feasibility and Tasking API is available to download:
Examples
The following examples assume you have curl installed and available via your command line terminal. If you are new to curl or need help installing it on your machine, we recommend following an online guide such as https://developer.zendesk.com/documentation/api-basics/getting-started/installing-and-using-curl/ to get started.
curl --location --request POST 'https://platform.ursaspace.com/api/pas/login' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=password' --data-urlencode 'username=<Your Ursa Space username/email>' --data-urlencode 'password=<Your Ursa Space password>'
If the login was successful, copy the access_token text out of the response and run the final command:
export TOKEN=<TOKEN>
This will create an environment variable $TOKEN that can be used in command line queries like those shown in examples below.
Submit a New Feasibility Request
curl --location 'https://platform.ursaspace.com/api/v1/tfs/feasibility' --header 'Content-Type: application/json' --header "Authorization: Bearer $TOKEN" --data '{
"target_lat": 42.0,
"target_lon": -76.0,
"start_datetime": "2024-10-10T00:00:00.000",
"end_datetime": "2024-10-12T00:00:00.000"
}'
{
"owner": "alexander.mcelroy@ursaspace.com",
"status": "CREATED",
"id": "c6a1980e-4cb4-426c-959a-b7a9016fe74c",
"feasibility_request": {
"target_lat": 42.0,
"target_lon": -76.0,
"start_datetime": "2024-10-10T00:00:00.000",
"end_datetime": "2024-10-12T00:00:00.000"
},
"created_at": "2024-10-06T18:37:56.243"
}
Get the Status of a Feasibility Request
curl --location 'https://platform.ursaspace.com/api/v1/tfs/feasibility/c6a1980e-4cb4-426c-959a-b7a9016fe74c' --header "Authorization: Bearer $TOKEN"
{
"owner": "alexander.mcelroy@ursaspace.com",
"status": "SUCCEEDED",
"id": "c6a1980e-4cb4-426c-959a-b7a9016fe74c",
"feasibility_request": {
"target_lat": 42.0,
"target_lon": -76.0,
"start_datetime": "2024-10-10T00:00:00.000",
"end_datetime": "2024-10-12T00:00:00.000"
},
"created_at": "2024-10-06T18:37:56.243",
"completed_at": "2024-10-06T18:39:20.000",
"tasking_opportunities": [
{
"geometry": {
"type": "Point",
"coordinates": [
-76.0,
42.0
]
},
"vendor": "UMBRA",
"satellite_id": "UMBRA-07",
"available_modes": [
"UMBRA_SPOTLIGHT_1M",
"UMBRA_SPOTLIGHT_50CM",
"UMBRA_SPOTLIGHT_35CM",
"UMBRA_SPOTLIGHT_25CM",
"UMBRA_SPOTLIGHT_1M_2_LOOKS",
"UMBRA_SPOTLIGHT_50CM_2_LOOKS",
"UMBRA_SPOTLIGHT_35CM_2_LOOKS",
"UMBRA_SPOTLIGHT_25CM_2_LOOKS",
"UMBRA_SPOTLIGHT_1M_3_LOOKS",
"UMBRA_SPOTLIGHT_50CM_3_LOOKS",
"UMBRA_SPOTLIGHT_35CM_3_LOOKS",
"UMBRA_SPOTLIGHT_25CM_3_LOOKS",
"UMBRA_SPOTLIGHT_1M_4_LOOKS",
"UMBRA_SPOTLIGHT_50CM_4_LOOKS",
"UMBRA_SPOTLIGHT_35CM_4_LOOKS",
"UMBRA_SPOTLIGHT_25CM_4_LOOKS",
"UMBRA_SPOTLIGHT_1M_5_LOOKS",
"UMBRA_SPOTLIGHT_50CM_5_LOOKS",
"UMBRA_SPOTLIGHT_35CM_5_LOOKS",
"UMBRA_SPOTLIGHT_25CM_5_LOOKS",
"UMBRA_SPOTLIGHT_1M_8_LOOKS",
"UMBRA_SPOTLIGHT_50CM_8_LOOKS",
"UMBRA_SPOTLIGHT_35CM_8_LOOKS",
"UMBRA_SPOTLIGHT_25CM_8_LOOKS",
"UMBRA_SPOTLIGHT_1M_10_LOOKS",
"UMBRA_SPOTLIGHT_50CM_10_LOOKS",
"UMBRA_SPOTLIGHT_35CM_10_LOOKS",
"UMBRA_SPOTLIGHT_25CM_10_LOOKS"
],
"window_open": "2024-10-10T03:03:15.000",
"window_close": "2024-10-10T03:13:30.000",
"look_direction": "RIGHT",
"grazing_min": 54.918,
"grazing_max": 69.872,
"incidence_min": 20.128,
"incidence_max": 35.082,
"azimuth_min": 198.517,
"azimuth_max": 318.212,
"squint_min": -59.514,
"squint_max": 59.744
},
{
"geometry": {
"type": "Point",
"coordinates": [
-76.0,
42.0
]
},
"vendor": "CAPELLA",
"satellite_id": "CAP-10",
"available_modes": [
"CAPELLA_SPOTLIGHT_ULTRA",
"CAPELLA_SPOTLIGHT",
"CAPELLA_SPOTLIGHT_WIDE",
"CAPELLA_STRIPMAP_20KM",
"CAPELLA_STRIPMAP_50KM",
"CAPELLA_STRIPMAP_100KM"
],
"window_open": "2024-10-10T20:36:14.459",
"window_close": "2024-10-10T20:38:57.158",
"look_direction": "RIGHT",
"grazing_min": 52.325,
"grazing_max": 58.847,
"incidence_min": 31.153,
"incidence_max": 37.675,
"azimuth_min": 83.777,
"azimuth_max": 87.868,
"squint_min": -74.875,
"squint_max": -70.791
}
]
}
Submit a New Tasking Request
Warning: Running this command will place a live tasking request that could incur costs.
curl --location 'https://platform.ursaspace.com/api/v1/tfs/tasking' --header 'Content-Type: application/json' --header "Authorization: Bearer $TOKEN" --data '{
"target_lat": 42.0,
"target_lon": -76.0,
"target_datetime": "2024-10-30T00:00:00.000",
"mode": "CAPELLA_SPOTLIGHT"
}'
{
"owner": "alexander.mcelroy@ursaspace.com",
"status": "RECEIVED",
"id": "7502f737-0f06-4085-b6df-9f8da9cb0c27",
"tasking_request": {
"mode": "CAPELLA_SPOTLIGHT",
"target_lat": 42.0,
"target_lon": -76.0,
"target_datetime": "2024-10-30T00:00:00.000"
},
"created_at": "2024-10-06T18:46:43.552"
}
Get the Status of a Tasking Request
curl --location 'https://platform.ursaspace.com/api/v1/tfs/tasking/7502f737-0f06-4085-b6df-9f8da9cb0c27' --header "Authorization: Bearer $TOKEN"
{
"owner": "alexander.mcelroy@ursaspace.com",
"status": "RECEIVED",
"id": "7502f737-0f06-4085-b6df-9f8da9cb0c27",
"tasking_request": {
"mode": "CAPELLA_SPOTLIGHT",
"target_lat": 42.0,
"target_lon": -76.0,
"target_datetime": "2024-10-30T00:00:00.000"
},
"created_at": "2024-10-06T18:46:43.552"
}
List All Tasking Requests
curl --location 'https://platform.ursaspace.com/api/v1/tfs/tasking' --header "Authorization: Bearer $TOKEN"
{
"tasking_requests": [
{
"owner": "alexander.mcelroy@ursaspace.com",
"status": "RECEIVED",
"id": "7502f737-0f06-4085-b6df-9f8da9cb0c27",
"tasking_request": {
"mode": "CAPELLA_SPOTLIGHT",
"target_lat": 42.0,
"target_lon": -76.0,
"target_datetime": "2024-10-30T00:00:00.000"
},
"created_at": "2024-10-06T18:46:43.552"
}
]
}
Cancel a Tasking Request
curl --location --request POST 'https://platform.ursaspace.com/api/v1/tfs/tasking/7502f737-0f06-4085-b6df-9f8da9cb0c27/cancel' --header "Authorization: Bearer $TOKEN"
{
"owner": "alexander.mcelroy@ursaspace.com",
"status": "CANCELED",
"id": "7502f737-0f06-4085-b6df-9f8da9cb0c27",
"tasking_request": {
"mode": "CAPELLA_SPOTLIGHT",
"target_lat": 42.0,
"target_lon": -76.0,
"target_datetime": "2024-10-30T00:00:00.000"
},
"created_at": "2024-10-06T18:46:43.552"
}