Welcome to Spectator API docs! Our API allows you to interact with Spectator programmatically using its functionalities and data directly. You can search for data, request images in high resolution, track satellite passes and more. To use the API, you'll need a key that is automatically generated for every account at https://app.spectator.earth and can be found in the profile panel.
If there is any functionality that you would like to see in this API, don't hesitate to contact us at api@spectator.earth
The free API access is for individual, non-commercial use only. For professional plans and usage limits, please visit our pricing page.
Unless specified otherwise, the default formats and conventions are listed below.
General
The default output from all the endpoints is JSON.
Geographic data
longitude, latitude
Dates
All dates are provided in UTC using ISO 8601 format.
For some satellites, Spectator uses KML files provided by ESA and USGS in order to determine if the overpassing satellite will acquire image over an area of interest. In the app, you can view acquisition plans for Sentinel-2, Landsat-8, Landsat-9 and Sentinel-1 here. This end-point serves raw data converted to a GeoJSON format.
Query Parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
satellites |
list of satellite names | string | optional(default all) |
datetime |
date | string | optional (default today's date) |
Output description
The output will vary, depending on the satellite. For more information check out acquisition plan file descriptions for Sentinel-1, Sentinel-2, Landsat-8
$ curl https://api.spectator.earth/acquisition-plan/?api_key=YOUR_API_KEY
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
157.52060705321486,
7.591169002363054
],
[
156.2451078116898,
7.871921228836858
],
[
155.78705786603518,
5.785692392466027
],
[
157.05736567642157,
5.504778540100358
],
[
158.32641183205322,
5.221190665901193
],
[
158.79435324996862,
7.306721023218564
],
[
157.52060705321486,
7.591169002363054
]
]
]
},
"properties": {
"id": "40825-4",
"scenes": "10",
"station": "SGS_",
"timeliness": "NOMINAL",
"orbit_absolute": "40825",
"orbit_relative": "73",
"observation_duration": "36080",
"begin_time": "2023-04-17T00:04:32Z",
"end_time": "2023-04-17T00:05:08Z",
"satellite": "Sentinel-2A"
}
}
]
}
You can list all available satellites, or optionally, query particular one by ID.
Query Parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
id |
satellite ID | integer | required |
Output description
Key | Description | Format |
---|---|---|
id |
satellite ID | integer |
geometry |
current satellite position | GeoJSON Point |
norad_id |
satellite catalog number | integer |
sensors |
sensors available on the satellite (SAR or Optical) | string |
avg_footprint_width |
average swath width of the sensors on board of the satellite | string |
open |
whether the data produced by the satellite is freely accessible | boolean |
$ curl https://api.spectator.earth/satellite/1/?api_key=YOUR_API_KEY
{
"id": 1,
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-85.26938616457066,
56.52063558777416,
704902.0625
]
},
"properties": {
"name": "Sentinel-1A",
"norad_id": 39634,
"modes": [
{
"name": "IW",
"swath": 250000,
"sensor_type": "SAR"
}
],
"open": true,
"platform": "Sentinel-1A",
"is_data_connected": false
}
}
A trajectory is a set of points, that describe the orbit of the satellite. The trajectory is calculated with a 60-seconds interval. This endpoint returns the trajectory for one full orbit.
Query parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
id |
satellite ID | integer |
Output description
Key | Description | Format |
---|---|---|
geometry |
trajectory geometry for current full orbit | GeoJSON LineString |
norad_id |
satellite catalog number | integer |
update_interval |
the time interval in seconds, between consequent points in the geometry | integer |
$ curl https://api.spectator.earth/satellite/1/trajectory/?api_key=YOUR_API_KEY
{
"id": 1,
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [...]
},
"properties": {
"norad_id": 39634,
"update_interval": 60.0
}
}
The API allows you to query all images available thorugh Spectator. You can search by bounding box or more complex geometry. You can also filter by date, satellite, cloud coverage and product type.
Note: At the moment the commercial imagery is only available through the app
Query Parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
api_key |
your API key | string | |
bbox |
area of interest bounding box | list of coords (lon, lat, lon, lat) | |
geometry |
area of interest geometry | GeoJSON or WKT | |
date_from |
earliest image date | yyyy-mm-dd | |
date_to |
latest image date | yyyy-mm-dd | |
satellites |
which satellites to include | string (Sentinel-1A, Sentinel-1A, Sentinel-2A, Sentinel-2B, Sentinel-3A, Landsat-8) |
|
cc |
cloud coverage on the image | float | |
cc_more_than |
cloud coverage on the image | float | |
cc_less_than |
cloud coverage on the image | float | |
product_type |
type of product | string |
|
page |
page | int |
$ curl https://api.spectator.earth/imagery/?bbox=19.59,49.90,20.33,50.21&api_key=YOUR_API_KEY
{
"page": 1,
"total_pages": 5,
"next": "https://api.spectator.earth/imagery/?bbox=19.59,49.90,20.33,50.21&api_key=YOUR_API_KEY",
"previous": null,
"results": [
{
"id": 1,
"uuid": "e00175f5-c05c-43fc-aedd-15789d64611e",
"identifier": "S2A_MSIL1C_20180910T095031_N0206_R079_T34UDA_20180910T135526",
"ingestion_date": "2018-09-10T17:26:05.649000Z",
"begin_position_date": "2018-09-10T09:50:31.024000Z",
"end_position_date": "2018-09-10T09:50:31.024000Z",
"download_url": "https://api.spectator.earth/imagery/1/files/",
"size": "657.46 MB",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
21.020836834433233,
50.551570884414545
],
[
19.588086136628576,
50.54373233188457
],
[
19.616762732856103,
49.55648784343155
],
[
20.534975843268384,
49.561440226336195
],
[
20.53972899782644,
49.57134302004747
],
[
20.60946588948272,
49.71588332371029
],
[
20.67990158730716,
49.8603553771008
],
[
20.75074048958287,
50.004805561228125
],
[
20.821890130174616,
50.14927412809048
],
[
20.89320850940868,
50.29366845966536
],
[
20.964533641882408,
50.43801074083652
],
[
21.020836834433233,
50.551570884414545
]
]
]
},
"satellite": "Sentinel-2A",
"scene_id": "S2A_tile_20180910_34UDA_0",
"cloud_cover_percentage": "4.97",
"product_type": "S2MSI1C"
}
]
}
Satellite imagery is stored in separate files for each band. You can download these files for given image directly from the API.
Query parameters
Name | Description | Format |
---|---|---|
api_key |
your API key | string |
id |
imagery id | int |
$ curl https://api.spectator.earth/imagery/1/files/?api_key=YOUR_API_KEY
[
{
"name": "B01.jp2",
"path": "B01.jp2",
"size": 3753753,
"url": "https://api.spectator.earth/imagery/1/files/B01.jp2/"
},
{
"name": "B02.jp2",
"path": "B02.jp2",
"size": 105748580,
"url": "https://api.spectator.earth/imagery/1/files/BB02.jp2/"
}
]
Images can be requested as map tiles using Slippy Map Tilenames. You can define the tile size and the bands to use in the formula. Depending on which satellite you are using, please have a look at the notes and example below the parameters table.
Query parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
api_key | your API key | string | required |
id | image id | int | required |
bands_formula | bands formula to use | string | required |
tilesize | tile size | int | optional (default=512) |
rescale | range of values to rescale single band image(e.g. NDVI) | int,int | required only for indices(e.g. NDVI) |
Note 1: Sentinel-2 band names are zero padded. E.g. bands_formula=b04,b03,b02
. For Landsat-8 the same band combination
would be bands_formula=b4,b3,b2
.
Note 2: The rescale parameter has to be used only when bands_formula
results in single-band image, like in the
case of NDVI. When using NDVI through the app the default value is -1,1
If you're looking for an example on how to use this end-point, check our short tutorial, which shows how to display Sentinel-2 image using LeafletJS.
If you don't want to download the whole image which can be time consuming, the API can provide you with a high-resolution image for the area within the acquisition boundaries,
Query parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
api_key |
your API key | string | required |
id |
image id | int | required |
bands |
bands | int, int, int | required |
bbox |
area of interest bounding box | list of coords (lon, lat, lon, lat) | optional |
width |
Image width | int | optional |
height |
Image height | int | optional |
Example URL for Sentinel-2 image of spectator.earth office in Kraków, Poland:
https://api.spectator.earth/imagery/18613048/preview?bands=4,3,2&bbox=19.871177673339847,50.009200785980795,19.
91430759429932,50.0312047240888162&height=798&width=1005&api_key=YOUR_API_KEY
You can query for overpasses of chosen satellite over defined area of interest. The output provides you with a satellite sensor footprint for the nearest overpass, overpass frequency in seconds and (if available) information about planned acquisition during given overpass.
Note:
days_before
and days_after
parameters.days_after
) is defined by plan limitQuery parameters
Name | Description | Format | Required/Optional |
---|---|---|---|
api_key |
your API key | string | |
bbox |
area of interest bounding box | list of coords (lon, lat, lon, lat) | |
geometry |
area of interest geometry | GeoJSON or WKT | |
satellites |
which satellites to include | string (Sentinel-1A, Sentinel-1A, Sentinel-2A, Sentinel-2B, Sentinel-3A, Landsat-8) |
|
days_before |
a number of days before the current date for which overpasses should be computed | integer | |
days_after |
a number of days after the current date for which overpasses should be computed | integer |
Output description
Key | Description | Format |
---|---|---|
frequency |
the frequency of overpasses per day w.r.t. input parameters | float |
overpasses |
list of overpasses | list |
date |
overpass date | date |
visibility_footprint |
the area on earth from which the satellite is visible | Polygon |
geometry |
GeoJSON Point describing the position of the satellite | Point |
footprints |
list of sensor footprints(the area on earth that the sensor can image) | FeatureCollection |
acquisition |
whether the image will be acquired(null if the acquisition plan for the satellite isn't available) | boolean or null |
$ curl https://api.spectator.earth/overpass/?bbox=19.59,49.90,20.33,50.21&satellites=Sentinel-2A&api_key=YOUR_API_KEY
{
"frequency": 0.89,
"overpasses": [
{
"id": 3579609,
"date": "2023-04-17T20:29:19.928324Z",
"visibility_footprint": {
"type": "Polygon",
"coordinates": [
...
]
},
"geometry": {
"type": "Point",
"coordinates": [
20.93649348547546,
47.41106601159571,
795606.5625
]
},
"satellite": "Sentinel-2B",
"footprints": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
22.87062053752537,
47.394747548147194
],
[
19.00236643342555,
47.394747548147194
],
[
17.370808257052193,
50.87677772043564
],
[
21.52005665056863,
50.87677772043564
],
[
22.87062053752537,
47.394747548147194
]
]
]
},
"properties": {
"mode": {
"name": "MSI",
"swath": 292000,
"sensor_type": "OPTICAL"
},
"acquisition": false
}
}
]
}
}
]
}