Getting Started with the Feasibility and Tasking API

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:

CAPELLA or UMBRA

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.

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:

CAPELLA or UMBRA

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
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

Capella

CAPELLA_SPOTLIGHT_ULTRA
CAPELLA_SPOTLIGHT
CAPELLA_SPOTLIGHT_WIDE
CAPELLA_STRIPMAP_20KM
CAPELLA_STRIPMAP_50KM
CAPELLA_STRIPMAP_100KM

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"
}