The AxelGlobe Tasking API allows for automation of our satellite tasking process. You can request a specific area of interest be captured at a specific date and time.
List of terms used in the API
Term | Meaning |
---|---|
AOI | Area of Interest. Some geographic area (Polygon) representing the area that is interested in being captures by a satellite. |
Capture | A single image taken by a satellite |
Task Candidate | Information about a possible future capture. Will have a specific area (footprint) and capture time. |
Task Plan | A combination of an AOI and TOI used to plan possible satellite captures. Task plans are just information for planning and do not automatically schedule captures. |
Task Request | A request to schedule a capture. This will consume a Task Credit and we will make a best effort to schedule a satellite to take a capture matching the requested Candidate. |
TOI | Time of Interest. Some time range that a Task Plan is valid for. Note this can not be created too far in the future. |
The structure of the AxelGlobe Tasking API follows the OGC API "Features" standard. Each collection of features are represented as GeoJSON.
The typical tasking workflow has the following steps:
Before connecting to the API you must generate a Token with credentials from our platform. Please contact us for more information about API access.
Use the Create an authorization Token request to generate a token. Securely store this token locally for up to 24 hours. Use this token for all subsequent requests in a session. After the token expires you can request a new one.
To get started tasking you have to plan a capture. This will allow our system to generate capture candidates that have been calculated and validated so they can be scheduled.
To create a Task Plan make a POST request to the Create Task Plan endpoint.
Note the validation rules for a Task Plan in the request body schema below.
Once the Task Plan is created our system will take up to 20 minutes to generate validated Task Candidates.
After waiting 20 minutes then list all the candidates using the
List Candidates endpoint.
This endpoint is paginated, and a the full list can be fetched by following
the links with of type rel=next
.
Note: if the list of candidates is empty after 20 or more minutes then we are not able to capture the planned AOI or TOI.
At this point any of the Candidates are able to be tasked. Review the list and decide on the optimal Task Candidate that fits your needs.
To schedule a Task Candidate create a Task Request using the Create Task request endpoint.
Provide the ID of the Candidate and the priority of the Task.
Note: this must be done within the lifetime of a Candidate (within approximately 24 hours after the candidate was created). If the Candidate is expired then fetch the list Candidate again to get fresh ones.
After the Task Request is accepted you can check the status of the Request.
Use the Task Request Details
endpoint to check the status
of the Request.
We recommend polling the API approximately once per hour to check for
status updates. Once the status becomes DATA_AVAILABLE
there will be a
link to our STAC API with all the data from the capture. Generally data
will be available 24-48 hours after the capture.
To use the API you need to create a Token with our authentication server.
This token should be reused between requests until it expires.
how to get token
Authorize Token
grant_type required | string Value: "client_credentials" |
audience required | string Value: "https://api.axelglobe.com" |
client_id required | string Client ID provided by the AxelGlobe platform. Do not share this information with anyone. |
client_secret required | string Client Secret provided by the AxelGlobe platform. Do not share this information with anyone. |
{- "grant_type": "client_credentials",
- "client_id": "ABCDEF00000000000",
- "client_secret": "SECRET_VALUE"
}
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.iUCROHt6JHANdtzT6aOuUgOqVFRalOW20SbzRsn5SkI",
- "expires_in": 86400,
- "token_type": "Bearer"
}
Follows OGC API - Features (WFS 3) Part-1 Core: 7.2.
curl https://sandbox-api.axelglobe.com/wfs/tasking/v2/ \ -H "Authorization: Bearer {{oauth_token}}""
{- "title": "The AxelGlobe Tasking API",
- "description": "Access to the tasking capabilities on the AxelGlobe via a REST API",
- "links": [
- {
- "href": "/wfs/tasking/v2/",
- "rel": "self",
- "type": "application/json",
- "title": "Landing page"
}, - {
- "href": "/wfs/tasking/v2/conformance",
- "rel": "conformance",
- "type": "application/json",
- "title": "OGC API - Features (WFS 3) conformance classes implemented by this server"
}, - {
- "href": "/wfs/tasking/v2/collections",
- "rel": "data",
- "type": "application/json",
- "title": "Metadata about the feature collections"
}
]
}
Follows OGC API - Features (WFS 3) Part-1 Core: 7.2.
{- "links": [
- {
- "rel": "self",
- "type": "application/json"
}
], - "collections": [
- {
- "id": "satellites",
- "title": "Request Captures",
- "description": "Request Captures",
- "itemType": "feature",
- "extent": {
- "temporal": {
- "interval": [
- [
- "2011-11-11T12:22:11Z",
- null
]
],
}
}, - "links": [
- {
- "rel": "items",
- "type": "application/geo+json"
}
]
}
]
}
{- "id": "satellites",
- "title": "AxelGlobe Satellites",
- "description": "List of satellites that can be Tasked with the AxelGlobe Tasking API",
- "itemType": "feature",
- "extent": {
- "temporal": {
- "interval": [
- [
- "2011-11-11T12:22:11Z",
- null
]
],
}
}, - "links": [
- {
- "rel": "items",
- "type": "application/geo+json"
}
]
}
{- "id": "satellite_ground_tracks",
- "title": "AxelGlobe Satellite Future Ground Tracks",
- "description": "Ground track showing the approximate future path of an AxelGlobe satellite for 1 orbit.",
- "itemType": "feature",
- "extent": {
- "temporal": {
- "interval": [
- [
- "2011-11-11T12:22:11Z",
- null
]
],
}
}, - "links": [
- {
- "rel": "items",
- "type": "application/geo+json"
}
]
}
{- "id": "plans",
- "title": "Registered AOIs for planning captures",
- "description": "Manage AOIs for planning captures",
- "itemType": "feature",
- "extent": {
- "temporal": {
- "interval": [
- [
- "2011-11-11T12:22:11Z",
- null
]
],
}
}, - "links": [
- {
- "rel": "items",
- "type": "application/geo+json"
}
]
}
{- "id": "candidates",
- "title": "Candidate Captures",
- "description": "Candidate Captures",
- "itemType": "feature",
- "extent": {
- "temporal": {
- "interval": [
- [
- "2011-11-11T12:22:11Z",
- null
]
],
}
}, - "links": [
- {
- "rel": "items",
- "type": "application/geo+json"
}
]
}
{- "id": "requests",
- "title": "Request Captures",
- "description": "Request Captures",
- "itemType": "feature",
- "extent": {
- "temporal": {
- "interval": [
- [
- "2011-11-11T12:22:11Z",
- null
]
],
}
}, - "links": [
- {
- "rel": "items",
- "type": "application/geo+json"
}
]
}
Information about our AxelGlobe GRUS satellite constellation. Basic information and future orbit data is provided as reference data to better understand how you can Task our satellites.
List AxelGlobe Satellites
limit | number <integer> [ 1 .. 20 ] Default: 10 Result pagination limit |
offset | number <integer> >= 0 Result pagination offset |
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "id": "GRUS-1B",
- "properties": {
- "platform": "GRUS-1B",
- "international_designator": "2021-022C",
- "instruments": [
- "msi"
], - "gsd": 2.5,
- "eo:bands": [
- {
- "name": "band1",
- "common_name": "red",
- "center_wavelength": 0.652,
- "full_width_half_max": 0.063,
- "solar_illumination": 1.5716542
}
], - "sat:orbit_state": "ascending"
}
}
], - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "next",
- "type": "application/geo+json"
}, - {
- "rel": "prev",
- "type": "application/geo+json"
}
], - "numberMatched": 5
}
Satellite Information
satelliteId required | string Example: grus-1b unique identifier for a Satellite |
{- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "id": "GRUS-1B",
- "properties": {
- "platform": "GRUS-1B",
- "international_designator": "2021-022C",
- "instruments": [
- "msi"
], - "gsd": 2.5,
- "eo:bands": [
- {
- "name": "band1",
- "common_name": "red",
- "center_wavelength": 0.652,
- "full_width_half_max": 0.063,
- "solar_illumination": 1.5716542
}
], - "sat:orbit_state": "ascending"
}
}
List AxelGlobe Satellites Ground Tracks. Check future orbits of the AxelGlobe GRUS satellite constellation. Ground tracks can be used to estimate possible Task coverage. However many factors are involved when requesting Tasks. Orbit data is for reference only.
limit | number <integer> [ 1 .. 20 ] Default: 10 Result pagination limit |
offset | number <integer> >= 0 Result pagination offset |
filter | string <string> Examples:
CQL2 filter for filtering by 'satellite_id' |
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "geometry": {
- "type": "MultiLineString",
- "coordinates": [
- [
- [ ]
]
]
}, - "id": "UmV2b2x1dGlvbjoxMDYzNTA3Mw==",
- "properties": {
- "platform": "GRUS-1B",
- "start_time": "2024-08-24T12:34:56Z",
- "end_time": "2024-08-24T14:34:56Z"
}
}
], - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "next",
- "type": "application/geo+json"
}, - {
- "rel": "prev",
- "type": "application/geo+json"
}
], - "numberMatched": 100
}
Satellite Ground Track. A single orbit of a satellite in the AxelGlobe GRUS satellite constellation.
trackId required | string Example: UmV2b2x1dGlvbjoxMDYzNTA3Mw== unique identifier for a Satellite Ground Track |
{- "type": "Feature",
- "geometry": {
- "type": "MultiLineString",
- "coordinates": [
- [
- [ ]
]
]
}, - "id": "UmV2b2x1dGlvbjoxMDYzNTA3Mw==",
- "properties": {
- "platform": "GRUS-1B",
- "start_time": "2024-08-24T12:34:56Z",
- "end_time": "2024-08-24T14:34:56Z"
}
}
Register an AOI to plan a capture
Create a Task Plan to get information about potential captures.
After creating a Plan it can take 10 ~ 20 minutes for candidates to be generated.
When a Plan has status ACTIVE
then you can check for possible candidates using the rel=candidates
link in the Plan response.
List your task plans
limit | number <integer> [ 1 .. 20 ] Default: 10 Result pagination limit |
offset | number <integer> >= 0 Result pagination offset |
bbox | Array of numbers <double> = 4 items [ items <double > ] Example: bbox=-82.4986738,39.5018036,-82.3153139,39.6200576 Filters out tasking plans that do not intersect the bbox |
datetime | string <date-time> Examples:
Filters out tasking plans whose TOI does not intersect with the specified date range. If |
filter | string <string> Example: filter=s_intersects(geometry, POLYGON ((-79.685265 -7.13192, -79.685265 -7.55499, -79.275122 -7.55499, -79.275122 -7.13192, -79.685265 -7.13192))) AND status='ACTIVE' a CQL2 filter that may include clauses like s_intersects(geometry, <some geometry literal>) or status='ACTIVE', joined by an AND clause |
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [ ]
]
}, - "id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "properties": {
- "created": "2025-07-03T12:10:45Z",
- "name": "July rice crop monitoring",
- "valid_start": "2025-07-01T00:10:59Z",
- "valid_end": "2025-07-14T00:00:00Z",
- "off_nadir_range": [
- 0,
- 15
], - "satellites": [
- "GRUS-1A",
- "GRUS-1B"
], - "status": "PROCESSING"
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "candidates",
- "href": "https://sandbox-api.axelglobe.com/wfs/tasking/v2/collections/candidates/items?filter=task_plan_id = 'VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw'",
- "type": "application/geo+json"
}
]
}
], - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "next",
- "type": "application/geo+json"
}, - {
- "rel": "prev",
- "type": "application/geo+json"
}
], - "numberMatched": 35
}
Create a new Task Plan Provide a Name, AOI and TOI. After 20 mins the system will generate Candidates for the Task Plan.
Create a new Task Plan
type required | string Value: "Feature" |
required | object For the minimum bounding box for the supplied geometry,
|
required | object |
{- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [ ]
]
}, - "properties": {
- "name": "July rice crop monitoring",
- "valid_start": "2024-01-01T00:10:59Z",
- "valid_end": "2024-01-01T00:10:59Z",
- "off_nadir_range": [
- 0,
- 10
], - "satellites": [
- "GRUS-1A",
- "GRUS-1B"
]
}
}
{- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [ ]
]
}, - "id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "properties": {
- "created": "2025-07-03T12:10:45Z",
- "name": "July rice crop monitoring",
- "valid_start": "2025-07-01T00:10:59Z",
- "valid_end": "2025-07-14T00:00:00Z",
- "off_nadir_range": [
- 0,
- 15
], - "satellites": [
- "GRUS-1A",
- "GRUS-1B"
], - "status": "PROCESSING"
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "candidates",
- "href": "https://sandbox-api.axelglobe.com/wfs/tasking/v2/collections/candidates/items?filter=task_plan_id = 'VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw'",
- "type": "application/geo+json"
}
]
}
Data about a Task plan
taskPlanId required | string unique identifier for a Task Plan |
{- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [ ]
]
}, - "id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "properties": {
- "created": "2025-07-03T12:10:45Z",
- "name": "July rice crop monitoring",
- "valid_start": "2025-07-01T00:10:59Z",
- "valid_end": "2025-07-14T00:00:00Z",
- "off_nadir_range": [
- 0,
- 15
], - "satellites": [
- "GRUS-1A",
- "GRUS-1B"
], - "status": "PROCESSING"
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "candidates",
- "href": "https://sandbox-api.axelglobe.com/wfs/tasking/v2/collections/candidates/items?filter=task_plan_id = 'VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw'",
- "type": "application/geo+json"
}
]
}
List candidates for a Task Plan. This must be filtered to a Task Plan ID using the CQL2 Filter syntax.
Task Candidates have a similar structure to STAC Items. Review the scene footprints and properties to decide the optimal capture for your use case.
Example:
GET /wfs/tasking/v2/collections/candidates/items?filter=task_plan_id+=+'VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw'
filter required | string Example: filter=task_plan_id = 'VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw' CQL2 Syntax filter. Must include a filter to a Task Plan by ID. |
limit | number <integer> [ 1 .. 100 ] Default: 10 Result pagination limit |
offset | number <integer> >= 0 Result pagination offset |
datetime | string <date-time> Examples:
Filters out tasking candidates whose capture period does not intersect with the specified date range. If |
bbox | Array of numbers <double> = 4 items [ items <double > ] Example: bbox=-82.4986738,39.5018036,-82.3153139,39.6200576 Filters out tasking candidates that do not intersect the bbox |
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "id": "T3Bwb3J0dW5pdHlDYW5kaWRhdGU6OEFLckVYYTl6Z1lSekoyUA==",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "properties": {
- "task_plan_id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "view:off_nadir": 7.56,
- "view:sun_elevation": 42,
- "view:sun_azimuth": 165.4,
- "plan_coverage": 75,
- "start_datetime": "2025-07-01T00:10:59Z",
- "end_datetime": "2025-07-01T00:11:59Z",
- "platform": "GRUS-1A",
- "constellation": "GRUS1",
- "valid_until": "2025-07-01T00:11:59Z"
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "parent",
- "type": "application/geo+json"
}
]
}
], - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "next",
- "type": "application/geo+json"
}, - {
- "rel": "prev",
- "type": "application/geo+json"
}
], - "numberMatched": 135
}
Data about a Candidate
candidateId required | string unique identifier for a Task Candidate |
{- "type": "Feature",
- "id": "T3Bwb3J0dW5pdHlDYW5kaWRhdGU6OEFLckVYYTl6Z1lSekoyUA==",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "properties": {
- "task_plan_id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "view:off_nadir": 7.56,
- "view:sun_elevation": 42,
- "view:sun_azimuth": 165.4,
- "plan_coverage": 75,
- "start_datetime": "2025-07-01T00:10:59Z",
- "end_datetime": "2025-07-01T00:11:59Z",
- "platform": "GRUS-1A",
- "constellation": "GRUS1",
- "valid_until": "2025-07-01T00:11:59Z"
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "parent",
- "type": "application/geo+json"
}
]
}
List your Tasks
limit | number <integer> [ 1 .. 20 ] Default: 10 Result pagination limit |
offset | number <integer> >= 0 Result pagination offset |
filter | string <string> Example: filter=priority='EMERGENCY' AND task_plan_id='<taskplan id>' a CQL2 filter that may be used to filter requests by their priority or task plan id |
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "id": "VGFzazowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDA=",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "properties": {
- "name": "My Task",
- "created": "2025-07-03T12:10:45Z",
- "valid_start": "2025-07-01T00:10:59Z",
- "valid_end": "2025-07-14T00:00:00Z",
- "off_nadir_range": [
- 5.6,
- 5.9
], - "satellites": [
- "GRUS-1A"
], - "priority": "NORMAL",
- "cancel_until": "2025-07-01T00:10:59Z",
- "task_plan_id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "status": "PLANNED",
- "ag:capture_id": null
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "parent",
- "type": "application/geo+json"
}, - {
- "rel": "assets",
- "href": "https://sandbox-api.axelglobe.com/stac/v1/catalogs/axelglobe/search?filter=ag:capture_id = 'cmFuZG9tc3RyaW5n'",
- "type": "application/geo+json"
}
]
}
], - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "next",
- "type": "application/geo+json"
}, - {
- "rel": "prev",
- "type": "application/geo+json"
}
], - "numberMatched": 35
}
Create a new Task. To conform to API standards this request is GeoJSON, however when proving a Candidate ID the Polygon geometry should be left empty.
Create a new Task
type required | string Value: "Feature" |
required | object |
required | object |
{- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "properties": {
- "name": "July rice crop monitoring",
- "candidate_id": "T3Bwb3J0dW5pdHlDYW5kaWRhdGU6OEFLckVYYTl6Z1lSekoyUA==",
- "priority": "NORMAL"
}
}
{- "type": "Feature",
- "id": "VGFzazowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDA=",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "properties": {
- "name": "My Task",
- "created": "2025-07-03T12:10:45Z",
- "valid_start": "2025-07-01T00:10:59Z",
- "valid_end": "2025-07-14T00:00:00Z",
- "off_nadir_range": [
- 5.6,
- 5.9
], - "satellites": [
- "GRUS-1A"
], - "priority": "NORMAL",
- "cancel_until": "2025-07-01T00:10:59Z",
- "task_plan_id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "status": "PLANNED",
- "ag:capture_id": null
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "parent",
- "type": "application/geo+json"
}, - {
- "rel": "assets",
- "href": "https://sandbox-api.axelglobe.com/stac/v1/catalogs/axelglobe/search?filter=ag:capture_id = 'cmFuZG9tc3RyaW5n'",
- "type": "application/geo+json"
}
]
}
Information about a Request.
taskRequestId required | string unique identifier for a Task Request |
{- "type": "Feature",
- "id": "VGFzazowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDA=",
- "geometry": {
- "type": "Polygon",
- "coordinates": [ ]
}, - "properties": {
- "name": "My Task",
- "created": "2025-07-03T12:10:45Z",
- "valid_start": "2025-07-01T00:10:59Z",
- "valid_end": "2025-07-14T00:00:00Z",
- "off_nadir_range": [
- 5.6,
- 5.9
], - "satellites": [
- "GRUS-1A"
], - "priority": "NORMAL",
- "cancel_until": "2025-07-01T00:10:59Z",
- "task_plan_id": "VGFza1BsYW46MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
- "status": "PLANNED",
- "ag:capture_id": null
}, - "links": [
- {
- "rel": "self",
- "type": "application/geo+json"
}, - {
- "rel": "parent",
- "type": "application/geo+json"
}, - {
- "rel": "assets",
- "href": "https://sandbox-api.axelglobe.com/stac/v1/catalogs/axelglobe/search?filter=ag:capture_id = 'cmFuZG9tc3RyaW5n'",
- "type": "application/geo+json"
}
]
}