Language

Manage Contract

When you sign up for a OneAtlas account, your user will be assigned to a contract. This contract will contain a private and dedicated workspace for yourself and any other users within the same contract.


There are currently two types of contact:

  • Premium: standard access based on a pre-paid service

  • TechEval: this contract will contain a “trial-plan” subscription which allows you to try our systems for a temporary period. A small load of money is already available when this account is created to let you try the paying options in real conditions.

This guide will walk you through managing your subscription, revoking your subscription and checking your payments.

Retrieve your Account Information

API Endpoint/api/v1/me
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/

The endpoint /me will retrieve all information related to your profile:

curl -X GET https://data.api.oneatlas.airbus.com/api/v1/me \
  -H 'Authorization: Bearer <access_token>'
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/me");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/me"

headers = {
    'Authorization': "Bearer <access_token>",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

You will receive the following:

      
      
    



This endpoint gives you access to the licence, information about your account such as ID and creation date, your contracts, orders, payments and subscriptions. Lets take a look at some of the above links example in more detail.

Get User Roles

You can quickly list your user roles by using the endpoint /me/services.

curl -X GET https://data.api.oneatlas.airbus.com/api/v1/me/services \
  -H 'Authorization: Bearer <access_token>'
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/me/services");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/me/services"

headers = {
    'Authorization': "Bearer <access_token>",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

Example return:

{
    "oneatlas-data": true,
    "change-detection": false,
    "geostore-premier": true,
    "verde": false,
    "ocean-finder": false,
    "earth-monitor": true,
    "analytics-toolbox": true,
    "pfneo-3d": false,
    "tasking": false
}

Get Contract Information

This API is used to retrieve details of a contract.

API Endpoint/api/v1/contracts/{contractId}
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
TagDescription
idunique contract identification object relating to the contract.
_linksprovides a direct link to the contract itself.
balanceyour remaining balance in your account.
workspaceIdid of the workspace.

Example to retrieve information regarding a contract:

curl -X GET \
  https://data.api.oneatlas.airbus.com/api/v1/contracts/{contract_id} \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json'
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contract_id}");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contract_id}"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

As a return we get all the details relating to the contract:

      
      
    



The status of the contract can either be pending, created, error or active.

Get All Subscriptions for a Given Contract

This API is used to retrieve all subscriptions within a contract.

API Endpoint/api/v1/contracts/{contractId}/subscriptions
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).
Path parametersRequiredDescription
contractIdyesString ; contractId
Query parametersRequiredDescription
pagenonumber >= 1 ; Page number, defaults to ‘1’
itemsPerPagenonumber >= 1
typenostring ; view change-detection
curl -X GET \
  https://data.api.oneatlas.airbus.com/api/v1/contracts/{contract_id}/subscriptions \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json'
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contract_id}/subscriptions");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contract_id}/subscriptions"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

Here you can see an example of the data returned:

      
      
    



Let’s look at some of the parameters above in more detail:

TagDescription
idUnique subscription identification object relating to the subscription.
statusStatus of the subscription.
startedAtStart date of the subscription.
endedAtEnd date of the subscription.
serviceCorresponds to the OneAtlas related service.
isAmountEstimatedIndicates whether amount is estimated or not.
titleCustom title of the subscription.
kindKind of the subscription, can be subscription.data.premium, subscription.oneatlas
offersOffers, can be order.data.gb.product for example.

Premium users will also have a OneAtlas subscription alongside their subscription plan. You can see this in the example above. This is a generic subscription given to all OneAtlas Data premium users. This gives you access to OneAtlas Data services, without this you will not have permission to use the full services.

Get Information for a Specific Subscription

This API is used to retrieve a subscription related to a contract.

API Endpoint/api/v1/contracts/{contractId}/subscriptions/{subscriptionId}
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).
Path parametersRequiredDescription
contractIdyesString ; contract Id
subscriptionIdyesString ; subscription Id

Here is an example to retrieve information on a subscription within a contract:

curl -X GET \
  https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/subscriptions/{subscriptionId} \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json'
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/subscriptions/{subscriptionId}");
xhr.setRequestHeader("Authorization", "Bearer");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/subscriptions/{subscriptionId}"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

For information related to your streaming plans please see the table below:

Streaming plan nameDescription
discoverIncludes the right to stream 1 GB
starterIncludes the right to stream 4 GB
standardIncludes the right to stream 10 GB
advancedIncludes the right to stream 30 GB

Revoke a Subscription

API Endpoint/api/v1/subscriptions/{subscription_id}/revoke
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).

Revoking is based on how many “runs” there are within your subscription. A quarterly subscription contains a max/min of 2 runs (2 runs * 3 months = 6 months). A monthly subscription can contain between a minimum of 2 runs (2 months) and a maximum of 6 runs (6 months). It is possible to revoke during a run, but the subscription will only stop at the end of the period.


You can revoke a subscription by passing the subscriptionId into the endpoint /revoke:

curl -X GET \
  https://data.api.oneatlas.airbus.com/api/v1/{subscriptionId}/revoke \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/{subscriptionId}/revoke");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/{subscriptionId}/revoke"

headers = {
    'Authorization': "Bearer",
    'Cache-Control': "no-cache",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

Once you have revoked your subscription, you will receive your newly updated subscription information with a new end date.

Refunding Your Account

  • If you revoke a monthly change detection subscription, you will be refunded for the months you have not used. For example, if you have a 4 month subscription starting in August and you decide to revoke on August 20th, you will be refunded the period September till November.

  • A quarterly subscription has a min/max of 2 runs (6 months). Therefore if you revoke during a quarterly subscription, you will be refunded for the 3 month quarter which you have not used. For example, if you have a quarterly subscription from January until June (6 months) and you revoke in March, you will be refunded the period April till June.

  • If your subscription has not started it will be instantly revoked and a full refund will be received.

Get Subscription consumption

API Endpointhttps://data.api.oneatlas.airbus.com/api/v1/subscriptions?service=data
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).

You can use this endpoint to track accurately your remaining credit and how much have been spent on streaming and imagery ordering.


curl -X GET \
  https://data.api.oneatlas.airbus.com/api/v1/subscriptions?service=data \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/subscriptions?service=data");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/subscriptions?service=data"

headers = {
    'Authorization': "Bearer",
    'Cache-Control': "no-cache",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

The response you get is the following:

      
      
    



Get Payments for a Contract

API Endpoint/api/v1/contracts/{contractId}/payments
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).
ParametersRequiredDescription
contractIdyesString ; contract id
paymentIdyesString ; payment id
Query parametersRequiredDescription
pagenonumber >= 1 ; Page number, defaults to ‘1’
itemsPerPagenonumber >= 1

You can use the following request to check your payments relating to your contract:

curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/payments' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/payments");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/payments"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

This will return:

      
      
    



Get Payments for a Subscription

API Endpoint/api/v1/subscriptions/{subscriptionId}/payments
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).
ParametersRequiredDescription
contractIdyesString ; contract id
subscriptionIdyesString ; payment id
Query parametersRequiredDescription
pagenonumber >= 1 ; Page number, defaults to ‘1’
itemsPerPagenonumber >= 1

You can use the following request to retrieve your payment information relating to a subscription:

curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/subscriptions/{subscriptionId}/payments' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/subscriptions/{subscriptionId}/payments");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/subscriptions/{subscriptionId}/payments"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

This will return:

      
      
    



Get Payment for a Contract and Payment ID

API Endpoint/api/v1/contracts/{contractId}/payments/{paymentId}
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).
ParametersRequiredDescription
contractIdyesString ; contract id
paymentIdyesString ; payment id

Here is an example to get payment information for a contract:

curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/payments/{paymentId}' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/payments/{paymentId}");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/contracts/{contractId}/payments/{paymentId}"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

This will return:

      
      
    



Get Payment for an Order

API Endpoint/api/v1/orders/{orderId}
REST verbGET
AuthenticationBearer Token
API Referencehttps://data.api.oneatlas.airbus.com/
API Get request(Use the access token retrieved during authentication step).
ParametersRequiredDescription
orderIdyesString ; order id

Here is an example to get payment and deliveries information for an order:

curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/orders/{orderId}' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/orders/{orderId}");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/orders/{orderId}"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

This will return:

      
      
    



Search

Our OneAtlas Data Living Library includes:
- nearly all daily acquisitions of Pléiades (50cm) imagery since the end of 2017. An extensive archive over North America, Europe, Asia and Middle East is also included going back 2 years.
- a selection of the best Pléiades Neo acquisitions since its launch over selected areas of interest
The search APIs allows users to express complex searches by filtering different parameters and specifying geographic criteria.

Prerequisites

If you haven’t already, see our Authentication Guide for information on how to acquire and use an API key and generate tokens to access to our endpoints.

Endpoint

The OneAtlas Data search API is compliant with the OpenSearch specification. The official specification documentation can be used as a reference: http://www.opensearch.org/.


API Endpointhttps://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch
REST verbGET / POST
AuthenticationBearer access token
API ReferenceOrdering API

Here are some example of searches with the Search API, more details can be found here.

      
      
    



Search Scope

A search scope defines the resources included in your search. The public workspace in which images are searched is unrestricted and accessible to any OneAtlas user.


In addition to this public workspace, any OneAtlas user has a private workspace which contains product that belongs to the user.


By default, a search is performed within all the workspaces you can reach, so the public scope and your personal workspace.


For example, here below is an example of a default images search in the public workspace and your personal workspace:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json'
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

headers = {
    'authorization': "Bearer <access_token>",
    'content-type': "application/json",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, verify=False)

print(response.text)

In addition, to proceed to a search in a private workspace, a user must retrieve first its workspaceId. To do so, the /me endpoint should be used:

curl  --silent -k -X GET -H " Authorization: Bearer <access_token>" \
  -H "Cache-Control: no-cache" \
  "https://data.api.oneatlas.airbus.com/api/v1/me"  | python -m json.tool |grep workspace | cut -d "\"" -f4

Example of id returned:

a20d890b-901c-4028-b7c3-f4efca2720e3

Finally, searching for products in your private workspace simply consists of adding a search criteria of your workspaceId. You can also decide to search images only within the Pléiades Neo products or within the SPOT and Pléiades products. For this, you can use the parameter workspace in your request with the value public for the Pléiades & SPOT catalog and public-pneo for the Pléiades Neo catalog.

Below is an example of a call for an image search within your personal workspace:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?workspaceid=a20d890b-901c-4028-b7c3-f4efca2720e3' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
vvar data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?workspaceid=a20d890b-901c-4028-b7c3-f4efca2720e3");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");

xhr.send(data);
import requests

url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"workspaceid":"a20d890b-901c-4028-b7c3-f4efca2720e3"}

headers = {
    'Cache-Control': "no-cache",
    'Authorization': "Bearer <access_token>"
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

Note: When searching, you will receive results from the full catalog as well as the Living Library. If you want to search only Living Library results, you will need to filter using processingLevel. This value could be equal to SENSOR (images which meet Living Library criteria) and ALBUM (images that do not meeting Living Library criteria in terms of incidence angle and cloud cover. They can not be streamed on-the-fly but you will be able to order them soon, for delivery in your private workspace). Below is an example of a call:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?processingLevel=SENSOR' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \

Note: Unfortunately, our stereo and tri-stereo products are not available via Living Library APIs or on OneAtlas portal. If you order such a product, the delivery will never be completed. We strongly advise to filter productType with the value mono to avoid any confusion in your research.

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?productType=mono' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \

Geographic Filters

The search API returns all images that intersect with a requested extent. The extent could be a circle, a bounding box or a polygon described using the WKT (Well Know Text) standard.

Search with a Circle

Below is an example to search for images within a circular area measuring 1000 meters in diameter centered over Toulouse:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?lat=43.60426&lon=1.44367&radius=1000' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?lat=43.60426&lon=1.44367&radius=1000");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");

xhr.send(data);
import requests

url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"lat":"43.60426","lon":"1.44367","radius":"1000"}

headers = {
    'Cache-Control': "no-cache",
    'Authorization': "Bearer <access_token>",
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

The center of the circle is expressed as a longitude and latitude coordinates, in decimal degrees in EPSG:4326 (typical WGS84 coordinates as returned by a GPS receiver). The request also includes a “radius” parameter that specifies the search radius.

Search Within a Bounding Box

The search could be performed within a bounding box. The box is defined by “west, south, east, north” coordinates of longitude, latitude, in a EPSG:4326 decimal degrees. This is also commonly referred to by minX, minY, maxX, maxY (where longitude is the X-axis, and latitude is the Y-axis), or also SouthWest corner and NorthEast corner.


Here below is an example to search for images within a bounding box over San Francisco (-122.537,37.595,122.303,37.807).

curl -X GET -H "Authorization: Bearer <access_token>" \
   -H "Cache-Control: no-cache" \
   "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?bbox=-122.537,37.595,-122.303,37.807"
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?bbox=-122.537,37.595,-122.303,37.807");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");

xhr.send(data);
import requests

url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"bbox":"-122.537,37.595,-122.303,37.807"}

headers = {
    'Cache-Control': "no-cache",
    'Authorization': "Bearer <access_token>",
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

Search Within a Polygon

The search could be performed within a polygon. This polygon must be defined according the WKT (Well Known Text) norm. This norm is design to define geographic areas using a simple textual formalism. The norm specification could be found on Wikipedia or directly on the OGC web site.


Here below is an example to search for images over Gibraltar:

gibraltar

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?relation=intersects&geometry=POLYGON%28%28-5.350972006554837%2036.10903284026139,-5.368052313561666%2036.15274102495853,-5.330715964074367%2036.153122194644425,-5.343590567345846%20036.1086861277239,-5.350972006554837%2036.10903284026139%29%29' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?relation=intersects&geometry=POLYGON%28%28-5.350972006554837%2036.10903284026139,-5.368052313561666%2036.15274102495853,-5.330715964074367%2036.153122194644425,-5.343590567345846%20036.1086861277239,-5.350972006554837%2036.10903284026139%29%29");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");

xhr.send(data);
uimport requests

url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"relation":"intersects","geometry":"POLYGON%28%28-5.350972006554837%2036.10903284026139,-5.368052313561666%2036.15274102495853,-5.330715964074367%2036.153122194644425,-5.343590567345846%20036.1086861277239,-5.350972006554837%2036.10903284026139%29%29"}

headers = {
    'Cache-Control': "no-cache",
    'Authorization': "Bearer <access_token>"
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

Field Filters

By utilizing multiple fields, complex criteria can be expressed across, with a variety of conditions. All field filters require a field name and a filter-specific value.

Filter per Image Resolution

You can use the constellation field value to filter by image resolution:

Field nameValueResolution
constellationPNEO0.3m
SPOT1.5m
PHR0.5m
curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?constellation=PHR' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "http://https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?constellation=PHR");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"constellation":"PHR"}

headers = {
    'authorization': "Bearer <access_token>",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, params=querystring, verify=False)

print(response.text)

Filter per Acquisition Date

In addition to a filter per image resolution, you may want to filter per acquisition date. To do so, an interval defined by a starting date and an ending date should be specified. For example, the following request searches for images which have an acquisition date between the 20 April 2018 and 04 June 2018:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?acquisitionDate=[2018-04-20T00:00:00.000Z,2018-06-04T00:00:00.000Z]' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?acquisitionDate=[2018-04-20T00:00:00.000Z,2018-06-04T00:00:00.000Z]");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"acquisitionDate" :"[2018-04-20T00:00:00.000Z,2018-06-04T00:00:00.000Z]" }

headers = {
    'authorization': "Bearer <access_token>",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, params=querystring, verify=False)

print(response.text)

Filter per Cloud Coverage

The images added to the OneAtlas living library do not contain more than 30% of clouds. If you need to filter images to select only images having less that 10% of cloud you can use the field cloudCover and provide the expected interval. For example, the following request filters images having a cloud coverage lower that 10%:

curl -X GET -H 'Authorization: Bearer <access_token>' \
    -H "Cache-Control: no-cache" \
    "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?cloudCover=[0,10]"
Not available.
url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"cloudCover":"[0,10]"}

headers = {
    'authorization': "Bearer <access_token>",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, params=querystring, verify=False)

print(response.text)

Sort Results

By default, the search results are sorted per acquisition date (newest data is displayed first) and per cloud coverage (less cloudy images are displayed first). For specific needs, you can specify your own sort criteria. For example, the following request sorts the search results per incidenceAngle:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?sortBy=incidenceAngle' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "http://https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?sortBy=incidenceAngle");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"sortBy":"incidenceAngle"}

headers = {
    'authorization': "Bearer <access_token>",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, params=querystring, verify=False)

print(response.text)

In the above example, the incidenceAngle value request for a ranking from the lowest value to the highest, while the -incidenceAngle would provide the reverse result.
The processingLevel property enables you to filter images according to Living Library criteria (Cloud cover under 30% and Incidence angle under 40°). Without filter, you will have full access to the Pléiades and SPOT archive imagery. The value SENSOR for this property filters images which meet Living Library criteria. The value ALBUM filters images which do not meet Living Library criteria, these images can not be streamed on the fly but you will soon be able to order them for delivery in your private workspace.

Paginate Results

The Living Library is updated on a daily basis and the number of images it contains is huge. To access to your complete set of results, to a max of 10,000 per search request, the results are paginated. By default, a page contains up to 50 results, with a max of 500.


For example, the following request displays the results for page 3, 100 results being contained in each page:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?itemsPerPage=100&startPage=3' \
  -H 'authorization: Bearer <access_token>' \
  -H 'cache-control: no-cache' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?itemsPerPage=100&startPage=3");
xhr.setRequestHeader("authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
url = "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch"

querystring = {"itemsPerPage":"100","startPage":"3"}

headers = {
    'authorization': "Bearer <access_token>",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, params=querystring, verify=False)

print(response.text)

Results

Each matching image is returned as a GeoJSON feature under the features[] property. The response should look like:

      
      
    



A search response body contains the following components for each feature:

  • _links : Contains all the endpoints to access to the imagery in full resolution (using OGC protocols) or to access to the quicklooks.
  • geometry : Represents the footprint of the image. It’s a GeoJSON Polygon in WGS84 coordinates that represents the geographic area that was acquired by the satellite.
  • rights : Contains information regarding your authorization rights.
  • properties : Contains detailed metadata of the image. The most meaningful data is displayed in the table below.
Field nameDescription
idUnique identifier of the image in the catalog
parentIdentifierCorresponds to the Datastrip identifier, a datastrip being a portion of image downlinked during a pass of the satellite to a given ground station
acquisitionDateCorresponds to he acquisition date of the image
cloudCoverCorrespond to the average cloud coverage of an image, 0 meaning that the image is cloud free and 100 that the image is totally cloudy
snowCoverCorresponds to the average snow coverage of an image, 0 meaning that the image is snow free and 100 that the image is totally snowy
constellationName of the constellation, in the case of OneAtlas Data this value could be equal to SPOT of PHR
platformName of the satellite, in the case of OneAtlas Data, this value could be equal to SPOT6, SPOT7, PHR1A or PHR1B
incidenceAngleThe incidence angle is the angle from the target point of view. It represents the angle between the ground normal and look direction from the satellite, combining the pitch and roll angles.
resolutionThis corresponds to the satellite used. 0.5 for Pléiades and 1.5 for SPOT.
processingLevelThis value could be equal to SENSOR (images which meet Living Library criteria) and ALBUM (images that do not meet Living Library criteria in terms of Incidence angle and Cloud cover. They can not be streamed on the fly but you will soon be able to order them for delivery in your private workspace)

Order from Analytics Toolbox

Ordering from Analytics Toolbox allows you to run an analytic on selected Living Library image(s) to generate a geojson report on your AOI that can be directly used in your GIS tool.

Analytics prerequisites

If you haven’t already, see our Authentication Guide for information on how to acquire and use an API key and generate tokens to access to our endpoints.

List available Analytics

To place an order for an Analytics Toolbox report, you will need the code and type of the analytic you want to run. The endpoint to get the list of available analytics in Analytics Toolbox is:

API Endpointhttps://data.api.oneatlas.airbus.com/api/v1/analytics
REST verbGET
AuthenticationJWT Token

Here below is an example of a call:

curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/analytics' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: application/json'

And the associated response :

      
      
    



The sensor indicates which constellation / resolution this analytic supports. Selected images must be in a supported resolution.

The type indicates the number of images this analytic requires objects analytics run on a single image to detect elements changes analytics compare a pair of images

If there are a lot of results, there is a pagination mechanism, you can use the itemsPerPage parameter to set the number of results per page and page parameter to navigate through the pages.

Search Images

To place an order for an Analytics Toolbox report, you will also need the id of the image(s) on which you want to run the analytic.

See our detailed Search Guide for information on how to search images within One Atlas.

Note: Only PRIMARY images are fully supported by all analytics therefore the images you use must have processingLevel=SENSOR

The endpoint to search images is:

API Endpointhttps://search.foundation.api.oneatlas.airbus.com/api/v1/opensearch
REST verbGET
AuthenticationJWT Token
API ReferenceSearch API

For our example, we will search all PHR images available on our AOI between May 1st and Aug 31st 2019, that have no more that 10% clouds, a maximum incidence angle of 20° and have SENSOR processingLevel.

In this case the JSON structure would be:

      
      
    



We will pick the 2 following images: 37bbfd56-7230-4875-a85f-5d9dc4b6e440 and 95e0b8fc-7bd1-404f-8f9c-a1798a45d57a

Calculate the Price of an Analytic Report

When calculating the price of an Analytic Report, you must provide the following parameters.

aoiThe AOI must be described as GeoJSON geometry. Only polygons are accepted.
analyticThe code of the analytic to run.
resolutionThe imagery resolution in meters. Accepted values are either 0.5 for Pléiades or 1.5 for SPOT. Some analytics only work on specific resolution, see analytics sensor.
imageIdsThe code of the image(s). The analytic type indicate the number of images to provide: objects analytics require 1 image while changes analytics require 2 images.
titleThe name/reference you want to give the report.

The endpoint to get a price for an Analytic Report is:

API Endpointhttps://data.api.oneatlas.airbus.com/api/v1/prices
REST verbPOST
AuthenticationJWT Token
API ReferenceOrder API

The only and mandatory parameter is a JSON payload following this schema:

      
      
    



Below is an example of the call:

curl -X POST \
  'https://data.api.oneatlas.airbus.com/api/v1/prices' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json'
  -d '{
    "kind": "order.analytics-toolbox.archive",
    "aoi": {
        "type": "Polygon",
        "coordinates": [
            [
                [-115.257324821538006, 36.135202530042903],
                [-115.119528582773995, 36.137064237966598],
                [-115.118644547198002, 36.062608357774501],
                [-115.256536683516998, 36.062233041334402],
                [-115.257324821538006, 36.135202530042903]
            ]
        ]
    },
    "analytic": "analytic.airbus.change-detection",
    "resolution": 0.5,
    "imageIds": [
        "37bbfd56-7230-4875-a85f-5d9dc4b6e440",
        "95e0b8fc-7bd1-404f-8f9c-a1798a45d57a"
    ],  
    "title": "Change Detection - Las Vegas"
}

The response is shown below:

      
      
    



The results are split into three different sections; payload, deliveries and price. The payload shows the input that you have submitted to the server. The deliveries will contains the link to the report file once generated. The price indicate the amount of credits that the order will cost.

Order of an Analytic Report

Once you calculated the price of a report you can then place the order. To proceed, the following endpoint must be used:

API Endpointhttps://data.api.oneatlas.airbus.com/api/v1/orders
REST verbPOST
AuthenticationJWT Token
API ReferenceOrder API

The payload of the order request is exactly like the one used to calculate the price:

      
      
    



Below is an example of the call:

curl -X POST \
  'https://data.api.oneatlas.airbus.com/api/v1/prices' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json'
  -d '{
    "kind": "order.analytics-toolbox.archive",
    "aoi": {
        "type": "Polygon",
        "coordinates": [
            [
                [-115.257324821538006, 36.135202530042903],
                [-115.119528582773995, 36.137064237966598],
                [-115.118644547198002, 36.062608357774501],
                [-115.256536683516998, 36.062233041334402],
                [-115.257324821538006, 36.135202530042903]
            ]
        ]
    },
    "analytic": "analytic.airbus.change-detection",
    "resolution": 0.5,
    "imageIds": [
        "37bbfd56-7230-4875-a85f-5d9dc4b6e440",
        "95e0b8fc-7bd1-404f-8f9c-a1798a45d57a"
    ],  
    "title": "Change Detection - Las Vegas"
}

The response is shown below:

      
      
    



The results give you the id of the order.

Order Status

To get the most current order status, you can call the following endpoint using the id obtained above.

API Endpointhttps://data.api.oneatlas.airbus.com/api/v1/orders/
REST verbGET
AuthenticationJWT Token
API ReferenceOrder API
curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/orders/<order_id>' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json'

Note: You can also just follow the link _links.self.href in the response above to get the most recent result.

The order status will say ordered while it is being processed. Once the report produced, the order will switch to delivered. The order can have the following statuses:

StatusAn error occurred during the production process.
errorPOST
deliveredThe report has been produced and available in your private workspace.
orderedThe report has just been ordered and will be processed; the production is in progress.
rejectedThe order has been rejected, insufficient balance.

List Orders

The /orders endpoint can be used to retrieve your orders:

API Endpointhttps://data.api.oneatlas.airbus.com/api/v1/orders/
REST verbPOST
AuthenticationJWT Token
API ReferenceOrder API

A filter could be associated to this request to display orders that have a specific status.

For example, listing the 10 last delivered orders could be requested by using the following:

curl -X GET \
  'https://data.api.oneatlas.airbus.com/api/v1/orders?status=delivered&kind=order.analytics-toolbox.archive&page=1&itemsPerPage=10' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json'

If there are a lot of results, there is a pagination mechanism, you can use the itemsPerPage parameter to set the number of results per page and page parameter to navigate through the pages.

Retrieve the Report

Once your order status is delivered, the deliveries[0]._links.download.href in the order response will contain a link to download your report.

You can then send a GET request to output your file as a geojson file:

curl -X GET \
  'https://access.foundation.api.oneatlas.airbus.com/api/v1/items/90ebd420-fab4-49b7-85cd-ced051ea2343/download' \
  -H 'Authorization: Bearer <access_token>' \
  -o output_file.geojson

Order an Individual Product

Ordering an individual product will provide you a chance to select an OneAtlas data Living Library image, clip it to your AOI, process it using your custom parameters and get delivered in your workspace. Once delivered, you will be able to download or stream the resulting product.

Note: When ordering a product your AOI must be minimum 0.1km² for all products.

Note: Unfortunately, our stereo and tri-stereo products are not available via Living Library APIs or on OneAtlas portal. If you order such a product, the delivery will never be completed.

When retrieving the price or ordering a product there will be parameters that you need to specify for the API to calculate the correct price. The same parameters will need to be specified when you place your order. This section will guide you through the available parameters for our Ordering API.
As Living Library offers several consumption modes, you will have to define the order kind you want to use:

Order kindConsumption modeDescriptionSensors
order.data.productkm²Consumption based on km²SPOT and Pléiades and Pléiades Neo
order.data.productTiles - This mode will be abandoned soonConsumption based on number of tiles viewedSPOT and Pléiades only
order.data.gb.productGB (GigaBytes) - This mode will be abandoned soonConsumption based on processed GBSPOT and Pléiades only

Available product types are:

Product typeDescriptionSensors
bundleone Panchromatic image + the Multispectral bands delivered separatelySPOT and Pléiades
pansharpenedmerging the Panchromatic with the full set of colour bandsSPOT and Pléiades
panchromaticone Panchromatic imageSPOT and Pléiades
multiSpectralthe Multispectral (Blue, Green, Red and Near Infrared) bandsSPOT and Pléiades
bundle-fsone Panchromatic image + the Multispectral bands delivered separatelyPléiades Neo
pansharpened-fsmerging the Panchromatic with the full set of colour bandsPléiades Neo

Available image format are:

Image FormatDescription
image/jp2The format of the delivered image will be JPEG 2000
image/geotiffThe format of the delivered image will be Geotiff

Available EPSG code are:

Image ProjectionDescription
EPSG:4326Geodetic coordinate system for World using Uses simple Equirectangular projection
EPSG:326[01-60]WGS 84 north zones
EPSG:327[01-60]WGS 84 south zones

Available radiometric processing types are:

Radiometric ProcessingDescriptionSensors
BASIC16No radiometric processing applied.SPOT and Pléiades only
REFLECTANCERadiometrically corrected images (sensor calibration and systematic atmospheric effects)SPOT and Pléiades and Pléiades Neo
DISPLAYOptimized for visual rendering. 8-bit pixel only.SPOT and Pléiades and Pléiades Neo

Calculate Price for an Individual Product

When calculating the price of an individual product you must specify certain parameters. The JSON structure to provide has the form:

      
      
    



To calculate the price of a product the following endpoint must be used:

API Endpoint/api/v1/prices
REST verbPOST
AuthenticationJWT Token
API ReferenceOrder API

Below is an example of a call:

curl -X POST \
  https://data.api.oneatlas.airbus.com/api/v1/prices \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{
  "kind": "order.data.product",
  "products": [
    {
      "productType": "bundle",
      "radiometricProcessing": "REFLECTANCE",
      "imageFormat": "image/jp2",
      "crsCode": "urn:ogc:def:crs:EPSG::4326",
      "id": "d42de348-110b-4ed6-a597-755867b3ee54",
      "aoi": {
        "type": "Polygon",
        "coordinates": [
          [
            [1.4089965820312502, 43.59829500262717],
            [1.4089965820312502, 43.63408731864001],
            [1.5078735351562496, 43.63408731864001],
            [1.5078735351562496, 43.59829500262717],
            [1.4089965820312502, 43.59829500262717]
          ]
        ]
      }
    }
  ]
}'
var data = JSON.stringify({
  "kind": "order.data.product",
  "products": [
    {
      "productType": "bundle",
      "radiometricProcessing": "REFLECTANCE",
      "imageFormat": "image/jp2",
      "crsCode": "urn:ogc:def:crs:EPSG::4326",
      "id": "d42de348-110b-4ed6-a597-755867b3ee54",
      "aoi": {
        "type": "Polygon",
        "coordinates": [
          [
            [1.4089965820312502, 43.59829500262717],
            [1.4089965820312502, 43.63408731864001],
            [1.5078735351562496, 43.63408731864001],
            [1.5078735351562496, 43.59829500262717],
            [1.4089965820312502, 43.59829500262717]
          ]
        ]
      }
    }
  ]
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://data.api.oneatlas.airbus.com/api/v1/prices");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

headers = {
    'Authorization': token,
    'Content-Type': "application/json",
    'Cache-Control': "no-cache",
    }
url = "https://data.api.oneatlas.airbus.com/api/v1/prices"
payload = {
  "kind": "order.product",
  "products": [
    {
      "productType": "bundle",
      "radiometricProcessing": "REFLECTANCE",
      "imageFormat": "image/jp2",
      "crsCode": "urn:ogc:def:crs:EPSG::4326",
      "id": "d42de348-110b-4ed6-a597-755867b3ee54",
      "aoi": {
        "type": "Polygon",
        "coordinates": [
          [
            [1.4089965820312502, 43.59829500262717],
            [1.4089965820312502, 43.63408731864001],
            [1.5078735351562496, 43.63408731864001],
            [1.5078735351562496, 43.59829500262717],
            [1.4089965820312502, 43.59829500262717]
          ]
        ]
      }
    }
  ]
}
response = requests.request("POST", url, json=payload,headers=headers)

Note: Your kind must be order.data.product if you have a GB subscription (soon to be deprecated), or order.data.product if you have either a tiles subscription (soon to be deprecated) or a km² subscription. Pléiades Neo is only accessible through km² subscription.

Here is a snippet of the response showing the price:

      
      
    



The response provides information regarding the number of credits that will be decrease from the customer account when the order will be placed.

Place an Order for an Individual Product

Once you calculated the price of an individual product, you can place the order for true. If you are ready to proceed, then the following endpoint must be used:

API Endpoint/api/v1/orders
REST verbPOST
AuthenticationJWT Token
API ReferenceOrder API

The JSON structure to use is equivalent to the structure used to calculate the price:

{
  "kind": "order.data.product",
  "products": [
    {

            "crsCode": "urn:ogc:def:crs:EPSG::4326",
            "productType": "pansharpened",
            "radiometricProcessing": "DISPLAY",
            "aoi": {
                "type": "Polygon",
                "coordinates": [
        ...
      }
    }
  ]
}

Below is an example of a call:

curl -X POST \
  https://data.api.oneatlas.airbus.com/api/v1/orders \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{
  "kind": "order.data.product",
  "products": [
    {
      "productType": "bundle",
      "radiometricProcessing": "REFLECTANCE",
      "imageFormat": "image/jp2",
      "crsCode": "urn:ogc:def:crs:EPSG::4326",
      "id": "d42de348-110b-4ed6-a597-755867b3ee54",
      "aoi": {
        "type": "Polygon",
        "coordinates": [
          [
            [1.4089965820312502, 43.59829500262717],
            [1.4089965820312502, 43.63408731864001],
            [1.5078735351562496, 43.63408731864001],
            [1.5078735351562496, 43.59829500262717],
            [1.4089965820312502, 43.59829500262717]
          ]
        ]
      }
    }
  ]
}'
var data = JSON.stringify({
  "kind": "order.data.product",
  "products": [
    {
      "productType": "bundle",
      "radiometricProcessing": "REFLECTANCE",
      "imageFormat": "image/jp2",
      "crsCode": "urn:ogc:def:crs:EPSG::4326",
      "id": "d42de348-110b-4ed6-a597-755867b3ee54",
      "aoi": {
        "type": "Polygon",
        "coordinates": [
          [
            [1.4089965820312502, 43.59829500262717],
            [1.4089965820312502, 43.63408731864001],
            [1.5078735351562496, 43.63408731864001],
            [1.5078735351562496, 43.59829500262717],
            [1.4089965820312502, 43.59829500262717]
          ]
        ]
      }
    }
  ]
});


var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://data.api.oneatlas.airbus.com/api/v1/orders");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/orders"

payload = {
  "kind": "order.data.product",
  "products": [
    {
      "productType": "bundle",
      "radiometricProcessing": "REFLECTANCE",
      "imageFormat": "image/jp2",
      "crsCode": "urn:ogc:def:crs:EPSG::4326",
      "id": "d42de348-110b-4ed6-a597-755867b3ee54",
      "aoi": {
        "type": "Polygon",
        "coordinates": [
          [
            [1.4089965820312502, 43.59829500262717],
            [1.4089965820312502, 43.63408731864001],
            [1.5078735351562496, 43.63408731864001],
            [1.5078735351562496, 43.59829500262717],
            [1.4089965820312502, 43.59829500262717]
          ]
        ]
      }
    }
  ]
}

headers = {
    'Authorization': "Bearer <access_token>",
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

Note: Your kind must be order.data.product if you have a GB subscription (soon to be deprecated), or order.data.product if you have either a tiles subscription (soon to be deprecated) or a km² subscription. Pléiades Neo is only accessible through km² subscription.

Here you can see the initial response with status ordered.

      
      
    



Within a few minutes your status will change from ordered to delivered.

Place an order for a product list

API Endpoint/api/v1/orders
REST verbPOST
AuthenticationJWT Token
API ReferenceOrder API

Here is an example of Body request

      
      
    



Here you can see the initial response with status ordered.

      
      
    



View Order Status

The /orders endpoint can be used to retrieve the status of your orders:

API Endpoint/api/v1/orders
REST verbGET
AuthenticationJWT Token
API ReferenceOrder API

Here below is an example of a call:

curl -X GET "https://data.api.oneatlas.airbus.com/api/v1/orders" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache"
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = false;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/orders");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/orders"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json",
    'Cache-Control': "no-cache",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

A filter could be associated to this request to display orders that have a specific status. Available statuses for orders are the following ones:

StatusDescription
errorAn error occurred during the production process.
deliveredThe products have been produced and available in your private workspace.
orderedThe products have just been ordered and will be processed; the production is in progress.
rejectedThe order has been rejected, insufficient balance.

Also, it is possible to filter per product kind, two kinds being available:

KindDescription
order.data.productIndividual image product
order.analytics-toolbox.archiveIndividual Analytics Toolbox product

If there are a lot of results to list, there’s a pagination mechanism to limit the number of results. If you want to activate it, the itemsPerPage parameter can be used.


For example, listing the first order delivered could be requested by using the following:

curl -X GET "https://data.api.oneatlas.airbus.com/api/v1/orders?status=delivered&kind=order.subscription.streaming&page=1&itemsPerPage=1" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache"
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = false;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/orders??status=delivered&itemsPerPage=1");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
Not available

And the associated response:

      
      
    



View Service

The OneAtlas Data View service allow users to easily access to images without having to download and maintain DIMAP products. This guide will walk you though using WMS and WMTS to stream on the fly.

Prerequisites: If you haven’t already, see our Authentication Guide for information on how to acquire an API key and generate tokens to access to our endpoints. If you would like to try the examples in this guide, ensure that GDAL Geospatial Data Abstraction Library is installed.

Preview Images

A preview is simple way to get a rapid insight of the imagery. The preview images include three bands (Blue, Red and Green), the pixel depth is 8 bits. A preview is neither orthorectified nor geolocalized. There are two kinds available:

KindDescription
ThumbnailsThe thumbnail is a very reduced size version of the image.
Its size depends of each image but is approximately 150 × 300 pixels.
QuicklookThe quicklook is a reduced size version of the image.
Its size depends of each image but is approximately 2500 × 5000 pixels.

The endpoints follow always the same pattern:

Preview typeEndpoint
thumbnailhttps://access.foundation.api.oneatlas.airbus.com/thumbnail/<image_id>
quicklookhttps://access.foundation.api.oneatlas.airbus.com/quicklook/<image_id>

To access a thumbnail or a quicklook you first need to perform a search in our Living Library to grab the corresponding id. You can see an example of a quicklook within our Search Guide. Alternatively we can grab the quicklook URL by inputting the sourceIdentifier into this cURL command:

curl -k -L --silent -X GET "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?sourceIdentifier=DS_PHR1B_201805071126173_FR1_PX_W004N43_0309_01462" |python -m json.tool | grep "/quicklook" \
    -H "Cache-Control: no-cache" \
    -H "Authorization: Bearer <access_token>"
Not available.
Not available.

Here you can see the quicklook URL returned:

"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/quicklook",

To download the quicklook image you can use an additional request. You can also specify the width of the quicklook by using parameters at the end of the URL (e.g. ?width=xxx).

curl --silent -X GET  "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/quicklook" > quicklook.jpg \
  -H "Authorization: Bearer <access_token>"
Not available.
Not available.

Now we can retrieve detailed information such as the size of the image using the gdalinfo utilitary:

> gdalinfo quicklook.jpg
Driver: JPEG/JPEG JFIF
Files: quicklook.jpg
Size is 909, 735
Coordinate System is `'
Image Structure Metadata:
  COMPRESSION=JPEG
  INTERLEAVE=PIXEL
  SOURCE_COLOR_SPACE=YCbCr
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  735.0)
Upper Right (  909.0,    0.0)
Lower Right (  909.0,  735.0)
Center      (  454.5,  367.5)
Band 1 Block=909x1 Type=Byte, ColorInterp=Red
  Overviews: 455x368, 228x184
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=909x1 Type=Byte, ColorInterp=Green
  Overviews: 455x368, 228x184
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=909x1 Type=Byte, ColorInterp=Blue
  Overviews: 455x368, 228x184
  Image Structure Metadata:
    COMPRESSION=JPEG

Full Resolution Images

The OGC (Open Geospatial Consortium) is an international not for profit organization committed to making quality open standards for the global geospatial community. These standards are made through a consensus process and are freely available for anyone to use to improve sharing of the world’s geospatial data.


In the frame of the OneAtlas Data service, the WMTS, WMS and WCS protocols are provided to ease the use and the display of imagery in desktop GIS applications (QGIS, ArcMap) or any web mapping platforms that provide WMTS, WMS or WCS support.


The protocols provide the access to OneAtlas data images referenced in the public catalog, as well as your processed products in your private workspace up to their full resolution.


There are three kinds of images available:

Multispectral- Multispectral images include three multispectral (color) bands (Blue, Red and Green), the pixel depth is 8 bits.
- The product pixel size is 6m for SPOT images and 2m for Pléiades images.
- Images with optimized true color rendering (Display) - adjusted luminosity and contrast and preserved color balance.
- The images are orthorectified with a geolocation accuracy of 10m CE 90.
  
Panchromatic- Panchromatic images include includes only one black and white band.
- The pixel depth is 8 bits.
- The product pixel size is 1.5m for SPOT images and 0.5m for Pléiades images.
- The images are orthorectified with a geolocation accuracy of 10m CE 90.
  
Pan-sharpened - Available on the fly- Pan-sharpened products combine the visual information of the multispectral data with the spatial information of the panchromatic data, resulting in a higher resolution 0.5-m color product.
- The pixel depth is 8 bits.
- The product pixel size is 1.5m for SPOT images and 0.5m for Pléiades images.
- Images with optimized true color rendering (Display)- adjusted luminosity and contrast and preserved color balance.
- The images are orthorectified with a geolocation accuracy of 10m CE 90.

WMS, WMTS and WCS

WMS

The OpenGIS® Web Map Service Interface Standard (WMS) provides a simple HTTP interface for requesting geo-registered map images from one or more distributed geospatial databases. A WMS request defines the geographic layer(s) and area of interest to be processed. The response to the request is one or more geo-registered map images (returned as JPEG, PNG, etc) that can be displayed in a browser application. The interface also supports the ability to specify whether the returned images should be transparent so that layers from multiple servers can be combined or not.


WMTS

The Web Map Tile Service (WMTS) service conforms to the WMTS Simple profile norm.  According the reference, this service provides a pyramid of tiles in two different projections: WebMercator (EPSG:3857) and Geographic (EPSG:4326), these will be discussed in further detail.


WCS

The OpenGIS® Web Coverage Service (WCS) provides an open specification for sharing raster datasets on the web. A WCS service returns data in a format that can be used as input for analysis and modeling. This is in contrast with the OGC Web Map Service (WMS), which only returns a picture of the data.

Streaming On the Fly

Note: This requires a streaming plan. See our Manage Contract Guide if you do not yet have a subscription.

If you have sufficient GB, OneAtlas Data will allow you to stream pansharpened imagery on the fly just by searching through our Living Library. The simple example below using the /opensearch endpoint retrieves everything within the Living Library:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v1/opensearch");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://search.foundation.api.oneatlas.airbus.com/api/v1/opensearch"

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json"
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

Note: Images which can not meet the Living Library criteria can not be streamed on the fly, you may only view thumbnails, quicklooks and order them. They can be filtered thanks to the following property processingLevel with the value ALBUM. The value SENSOR enables to filter images which can be streamed and meet Living Library criteria.

To learn how to search by AOI, resolution, id and more, refer to our Search Guide. Once you have ordered your product, you will retrieve your WMTS, WMS and WCS URLs:

"wmts": {
    "href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wmts",
    "name": "WMTS",
    "type": "WMTS"
},
"wms": {
    "href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wms",
    "name": "WMS",
    "type": "WMS"
}
"wcs": {
    "href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wcs",
    "name": "WCS",
    "type": "WCS"
}

We will look at how you can use these URLs in more detail further in the guide.

Streaming from Your Workspace

Your workspace provides your contract with an area of all purchased imagery. All users on the same contract will have access to the same workspace. These images will be in type bundle which will allow you to stream either Panchromatic or Multispectral images. If you wish to stream imagery already within your workspace, you can filter using your workspaceId:

curl -X GET \
  'https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?workspaceId=<workspace_id>' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \

var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://search.foundation.api.oneatlas.airbus.com/api/v1/opensearch?workspaceId=<workspace_id>");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(data);
import requests

url = "https://search.foundation.api.oneatlas.airbus.com/api/v1/opensearch"

querystring = {"workspaceId":"<workspace_id>"}

headers = {
    'Authorization': "Bearer <access_token>",
    'Content-Type': "application/json"
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

Alternatively, you can do this in one cURL command bif you know the sourceIdentifier:

curl --silent -k -L -X GET "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?sourceIdentifier=DS_PHR1B_201805071126173_FR1_PX_W004N43_0309_01462" \
   -H "Authorization: Bearer <access_token>" \
   -H "Cache-Control: no-cache" \
   | python -m json.tool | egrep "href"
Not available.
Not available.

This will return all URLs related to the sourceIdentifier that you have provided:

"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/metadata",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/delete",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/quicklook",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/thumbnail",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wms",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wmts",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wcs"

Panchromatic and Multispectral

By using the WMTS URL above, this will stream Panchromatic imagery by default. If you wish to stream Multispectral you can use the Metadata URLs returned in your workspace:

"imagesMetadata": [
    {
        "href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/9c41e689-3069-409a-ace7-af8cc512223e/images/1e2cf2fa-449a-43fe-ae2e-60df4bbbe5f7/metadata",
        "name": "panchromatic",
        "type": "application/geo+json"
    },
    {
        "href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/9c41e689-3069-409a-ace7-af8cc512223e/images/6950d957-58af-442d-ab3f-d684b917f423/metadata",
        "name": "multispectral",
        "type": "application/geo+json"
    }
  ]

You will need to amend your URL to fit the Multispectral metadata URL as follows:

# Example of WMS request for multispectral
https://access.foundation.api.oneatlas.airbus.com/api/v1/items/9c41e689-3069-409a-ace7-af8cc512223e/images/6950d957-58af-442d-ab3f-d684b917f423/wms

# Example of WMTS request for multispectral
https://access.foundation.api.oneatlas.airbus.com/api/v1/items/9c41e689-3069-409a-ace7-af8cc512223e/images/6950d957-58af-442d-ab3f-d684b917f423/wmts

# Example of WCS request for multispectral
https://access.foundation.api.oneatlas.airbus.com/api/v1/items/9c41e689-3069-409a-ace7-af8cc512223e/images/6950d957-58af-442d-ab3f-d684b917f423/wcs

Access Imagery from GIS Tools

The OneAtlas Data streaming services follows rigorously the OGC norm for its WMTS, WMS and WCS implementation. Consequently, the integration of our URLs in these GIS tools is straightforward.

QGIS

You can easily access the OneAtlas Data imagery with OSGeo's QGIS Desktop application. QGIS is an Open Source Geographic Information System (GIS) app licensed under the GNU General Public License. QGIS can act as a WMS, WMTS and WCS client. The procedure to view WMS/WMTS imagery is documented directly on the QGIS website.


In the menu _“Layer” / “Add Layer” / “Add WMS/WMTS Layer…” / “New”, you will need to provide your WMS/WMTS/WCS URL.


To ensure a secure experience, a username and password are mandatory to access to OneAtlas Data images. The credentials to use are listed in the table below:

UsernameAPIKEY
Passwordinsert_your_api_key

The resulting dialog box filled out should look like:

qgis_login.png

And the result in QGIS is:

qgis_result.png

Note: if no tiles are returned, please ensure checkboxes : “Invert axis orientation (WMS 1.3/WMTS)” and “Invert axis orientation” are selected.

QGIS - OneAtlas Data plugin

You can display a set of search and selected images by using the OneAtlas plugin for QGIS 3.

Installation

Go to “Plugins” menu and select “Manage and Install Plugins…”. Search for “OneAtlas” and select the “OneAtlas” plugin on the result, and click on the “Install Plugin” button. 10.png

11.png

Overview of the plugin

  • Display search window 1.png
  • Display one imagery stream (after selecting the footprint found) 2.png

Search Window

  1. “Configuration” tab
  2. Set your Basemap credentials for searching OneAtlas Basemap
  3. Set your API key for searching OneAtlas Data (Living Library) 3.png

  4. Use an Area Of Interest (AOI)

  5. By clicking on “Draw” button

  6. By loading your own shape, selecting it and clicking on “Use selected” button 4.png

  7. “Basemap” tab - For Searching Basemap

  8. Click on “Basemap search” button 5.png

  9. “Data” tab - For Searching Living Library

  10. Set your search criterias

  11. Click on “Data search” button 6.png

Display imagery stream

  • Select the footprint of the imagery expected
  • Click on the “Display Imagery” button of the toolbar 7.png 8.png

For Living Library Imagery (“Data” tab), if you have ordered the image you can select the stream (protocol) expected and select the representation (style). 9.png

ArcGIS Desktop

You can easily access to the OneAtlas Data imagery with ESRI ArcGIS Desktop, a commercial product used by GIS professionals to compile, use, and manage geographic information. The procedure to follow is documented directly on the ESRI website.


You will need to provide:

  • The WMTS, WMS or WCS endpoint , e.g. https://access.foundation.api.oneatlas.airbus.com/api/v1/items/image_id/wmts
  • Credentials to be authorized to display the image
UsernameAPIKEY
Passwordinsert_your_api_key

The resulting dialog box filled out looks should look like:

arcgis_wmts_config.png

The result in ArcGIS Desktop will look like:

arcgis_desktop.png

ArcGIS Desktop OneAtlas Data AddIn

You can display a set of search and selected images by using the ArcGIS Desktop.

Prerequisites

ArcGIS for Desktop 10.5 or higher.

Installation

Double click on OneAtlas Data AddIn file. 1.png Launch ArcMap and activate toolbar by clicking on “Customize > Toolbars > OneAtlas Data Plugin”.

2.png 3.png

Overview of the AddIn


Search for OneAtlas Data Images 4.png Draw a rectangular Area Of Interest 5.png Draw a polygon Area Of Interest 6.png Erase current Area Of Interest 7.png Change connection settings 8.png

Searching and displaying images


Draw an Area Of Interest by using the rectangular tool

9.gif Open search window, define search criterias and launch the search by clicking on “Search By AOI”

10.png Put your OneAtlas Data API Key, and press validation button 11.png Click on “Search with limitations” buttons, the bounding box of all the images found in catalog is displayed.

12.gif Select images to view the metadata. 13.gif Click on “Add Selected Images as Layers” button to display the image in full resolution using WMTS endpoint. 14.gif 15.gif

ArcMap layers available


“AOI & Search Criteria” layer, store Area Of Interest bounding box and the criterias used for your search 16.gif “Search Results” layer, store bounding box and metadata of the images found 17.gif

Searching by ID

Put the IDs of the images, and click on button “Search By IDs” 18.gif Select images to view the metadata. 19.gif Click on “Add Selected Images as Layers” button to display the image in full resolution using WMTS endpoint. 20.gif

ArcGIS Enterprise

Go to your ArcGIS Enterprise instance and authenticate.
Click on the “Map” menu then on “Modify Map” on the upper right corner of the map, next to the “Sign In” button.
Select “Add Layer from the Web” and “A WMTS OGC Web Service” from the drop down list as type of data to reference. You will need to provide:
- The WMTS endpoint of the Living Library Image (see Search results)
- Credentials (an APIKEY) to be authorized to display the Living Library Image (see Authenticate Guide)

ArcGIS_enterprise.png The layer name will be displayed in the ArcGIS Enterprise “Table Of Content” on the left hand side of the map. Meanwhile, the layer will display on the map.

Access Imagery from Your Own Code

As an example, we will use the following area of San Francisco International Airport:

arcgis_map.png

The coordinates of the bounding box to extract are:

LongitudeLatitude
Upper left corner-122,38594651222237,6203332456312
Bottom right corner-122,38220214843737,6176733171484

The first step is to select the image from which we want to extract a subpart:

curl --silent -k -L -X GET   "https://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?itemsPerPage=1&startPage=1&relation=intersects&geometry=POLYGON((-122.38594651222229%2037.61767331714846%2C-122.3822021484375%2037.61767331714846%2C-122.3822021484375%2037.62033324563128%2C-122.38594651222229%2037.62033324563128%2C-122.38594651222229%2037.61767331714846))" \
  -H "Authorization: Bearer <access_token>" \
  -H "Cache-Control: no-cache" |python -m json.tool |egrep "href"
Not available.
Not available.

This example searches for an image with the specified polygon coordinates and extracts all URLs relating to this image (including WMS, WMTS and WCS):

"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/metadata",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/quicklook",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/thumbnail",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wms",
"href": "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wmts",

Using WMS Protocol

You can use the WMS protocol to access to a subpart of an image. In this example we show a number of parameters needed to make a successful GetMap request:

curl -X GET \
  'https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<item_id>/images/<Images_Id>/wms?REQUEST=GetMap&VERSION=1.3.0&LAYERS=layer_0&CRS=EPSG:4326&BBOX=<BBOXCoordinates>&WIDTH=600&HEIGHT=400&FORMAT=image/png'\
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
Not available
Not available
https://access.foundation.api.oneatlas.airbus.com/api/v1/items/image_id/wmsThis is the URL corresponding to the image and to the product type from which the request has to be done.
VERSION=1.3.0This is the most recent WMS request version.
REQUEST=GetMapThis is the request name.
CRSThis is the spatial reference value. The value could be EPSG:4326 or EPSG:3857
BBOXThis is the ounding box for map extent. The value is 'minX, minY, maxX, maxY' in units of the SRS.
WIDTH / HEIGHTThis is the width or height of the requested image in pixels.
FORMAT=image/pngThis is the requested image format.

Here we can see the PNG result of the request above for the requested pixel size (600 × 400) satisfying our bounding box:

arcgis_pic.png

Using WMTS Protocol

This section details how to use the WMTS protocol from your own code. It’s a bit more complex that using the WMS protocol, but your efforts will be rewarded with better performance. To do so, you will need to convert the from geographic coordinates into tiles coordinates.

GetCapabilities

To retrieve the endpoint to access to a single tile, you should use the GetCapabilities file corresponding to the image from which you want to extract tiles.


The characteristics of the endpoint to access to the GetCapabilities are:

API Endpoint<wmts_url>?request=GetCapabilities
REST verbGET
AuthenticationBearer access token
API ReferenceView API

Here is an example of a GetCapabilities request:

curl -X GET "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<image_id>/wmts?request=GetCapabilities"
  -H "Authorization: Bearer <access_token>"
  -H "Cache-Control: no-cache"
Not available.
Not available.

This will return an XML file with tiles. Below you can see an extract the XML file:

<TileMatrix>
  <ows:Identifier>12</ows:Identifier>
  <ScaleDenominator>68247.34668319309</ScaleDenominator>
  <TopLeftCorner>90.000000 -180.000000</TopLeftCorner>
  <TileWidth>256</TileWidth>
  <TileHeight>256</TileHeight>
  <MatrixWidth>8192</MatrixWidth>
  <MatrixHeight>4096</MatrixHeight>
</TileMatrix>

Get Tiles for a Geographic Tile Matrix Set

If you intend to get the tiles coordinates for the Geographic tile matrix set, you should use the formula below:

  • x = [ (longitude + π) / (2 × π) ] × MatrixWidth
  • y = [1 - [ (latitude + π/2 ) / π ] ] × MatrixHeight

Note: latitude and longitude should be in radians.

The Geographic tile matrix set is described as follows:

  • CRS Name: urn:ogc:def:crs:OGC:1.3:CRS84 CRS84
  • Top left corner: [ -180 , 90 ]
  • Tile size: 256 × 256 pixels
Zoom level idScale DenominatorPixel Size (degrees)Pixel Size (m)*Matrix WidthMatrix Height
-1559082264.02871781.4062511
0279541132.01435890.70312570312.521
1139770566.00717940.35156250035156.2542
269885283.003589720.17578125017578.12584
334942641.501794868.78906250 × 10-28789.063168
417471320.750897434.39453125 × 10-24394.5313216
58735660.3754487152.19726562500 × 10-22197.2666432
64367830.1877243571.09863281250 × 10-21098.63312864
72183915.0938621795.49316406250 × 10-3549.316256128
81091957.5469310892.74658203125 × 10-3274.658512256
9545978.77346554471.37329101562500 × 10-3137.3291024512
10272989.38673277236.86645507812500 × 10-468.66520481024
11136494.69336638623.43322753906250 × 10-434.33240962048
1268247.346683193091.71661376953125 × 10-417.16681924096
1334123.673341596548.58306884765625 × 10-58.5831163848192
1417061.836670798274.29153442382812 × 10-54.29153276816384
158530.9183353991362.14576721191406 × 10-52.14586553632768
164265.4591676995681.07288360595703 × 10-51.072913107265536
172132.7295838497845.36441802978516 × 10-60.53644262144131072

* Approximation at the equator


The matrix width and height depends on the zoom level. You can pick the correct value using the table provided above. Be aware that the size of the tile matrix differs between the Geographic and the Web Mercator tile matrix set.


The request returns an XML response which is conformed to the OGC specification. By aggregating different elements such as the style, the tile matrix set with the ResourceURL value and integrating the tiles coordinates, you can access a single tile.


The below example contains the following elements which make up the URL to retrieve a tile:

  • EPSG - in this example it is “EPSG4326”
  • Zoom level - in this example this is “17”
  • Upper left tile - in this example it is “41955”
  • Bottom right tile - in this example it is “38143”
curl -X GET "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<item_id>/images/<image_id>/wmts/tiles/1.0.0/default/rgb/EPSG4326/17/41955/38143.png"
  -H "Authorization: Bearer <access_token>" \
  -H "Cache-Control: no-cache"
Not available.
Not available.

Here you can see the result displaying one tile:

tile_4326_17_41955_38143.png

For this example the result is made up of 9 tiles. The overall size of the composite image is 728 (3 × 256) pixels per 728 pixels (3 × 256 pixels) and the returned BBOX exceeded the initial BBOX requested.

tiles_crop.png

Geographic Converter (EPSG:4326)

Note: The converter uses input type degrees

To retrieve a URL for a single tile, you can use our simple Geographic converter below. You will require the following:

  • The longitude and latitude for the top left and bottom right corner. These can be found within your AOI coordinates.
  • The zoom level you would like to access. These are shown within the GetCapabilities XML result.
  • The id of the image. You should have used this previously for the GetCapabilities result.




Your Geographic url results:

* Required fields


Get Tiles for a Web Mercator Tile Matrix Set

If you intend to get the tiles coordinates for the Web Mercator tile matrix set, you will have to first reproject the coordinates to the Mercator projection (from EPSG:4326 to EPSG:3857). Then you will be required to transform the range of latitude and longitude to 0 - 1 and shift origin to top left corner:

  • n = 2 ^zoom
  • xtile = n × ((longitude + π) / (2 × π))
  • ytile = (1 - (log(tan(latitude) + sec(latitude)) / π)) / (2 × n)

Note: latitude and longitude are required in radians.

The Web Mercator tile matrix set is described as follows:

  • CRS Name: urn:ogc:def:crs:EPSG:6.18:3:3857
  • Top left corner: [ -20037508.3427892 , 20037508.3427892 ]
  • Tile size: 256 × 256 pixels
Zoom level idScale DenominatorPixel Size (m)Matrix WidthMatrix Height
0559082264.0287178156543.033928041011
1279541132.014358978271.5169640204822
2139770566.007179439135.7584820102344
369885283.0035897219567.8792410051288
434942641.501794869783.9396205025611616
517471320.750897434891.9698102512803232
68735660.3754487152445.9849051256406464
74367830.1877243571222.992452562820128128
82183915.093862179611.4962262814100256256
91091957.546931089305.7481131407048512512
10545978.7734655447152.874056570352510241024
11272989.386732772376.4370282851762420482048
12136494.693366386238.2185141425881340964096
1368247.3466831930919.109257071294068192819zoom_wm2
1434123.673341596549.5546285356470321638416384
1517061.836670798274.7773142678235163276832768
168530.9183353991362.3886571339117586553665536
174265.4591676995681.194328566955879131072131072
182132.7295838497840.5971642834779395262144262144

You can use the same principle explained for the geographic tile grid. You must include the following elements within the URL:

  • EPSG - in this example it is “EPSG3857”
  • Zoom level - in this example this is “17”
  • Upper left tile - in this example it is “41955”
  • Bottom right tile - in this example it is “38143”
curl -X GET  "https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<item_id>/images/<image_id>/wmts/tiles/1.0.0/default/rgb/EPSG3857/17/41955/38143.png" \
  -H "Authorization: Bearer <access_token>" \
  -H "Cache-Control: no-cache"
Not available.
Not available.

Web Mercator Converter (EPSG:3857)

Note: The converter uses input type degrees.

To retrieve a URL for a single tile, you can use our simple Web Mercator converter below. You will require the following:

  • The longitude and latitude for the top left and bottom right corner. These can be found within your AOI coordinates.
  • The zoom level you would like to access. These are shown within the GetCapabilities XML result.
  • The id of the image. You should have used this previously for the GetCapabilities result.




Your Web Mercator url results:

* Required fields


Download Service

OneAtlas Data API not only gives you the ability to stream imagery, but also allows you to download your product locally onto your machine. This section presumes you have already purchased the product and that it’s within your workspace. If you have not yet purchased a product you can do this by following our order guide.

Retrieve your Product

We can use the endpoint contracts/<contract_id>/orders to list all your orders within your contract. An example of the data returned is shown below:

curl -X GET \
  https://data.api.oneatlas.airbus.com/api/v1/contracts/<contract_id>/orders \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://data.api.oneatlas.airbus.com/api/v1/contracts/<contract_id>/orders");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer <access_token>");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);
import requests

url = "https://data.api.oneatlas.airbus.com/api/v1/contracts/<contract_id>/orders"

headers = {
    'Content-Type': "application/json",
    'Authorization': "Bearer <access_token>",
    'Cache-Control': "no-cache",
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

Note: Orders are displayed by date processed. Therefore if you have just purchased a product, your order will be at the top.

This will return deliveries[] which contains your ordered products. Your delivery will start as status ordered and will change to delivered when it is ready to download:

      
      
    



Download your Product

If your product is at status delivered you will see a download URL similar to the following:

https://access.foundation.api.oneatlas.airbus.com/api/v1/items/<contract_id>/download

You send a GET request to output your file as a zip file:


curl -X GET \
  https://access.foundation.api.oneatlas.airbus.com/api/v1/items/90ebd420-fab4-49b7-85cd-ced051ea2343/download \
  -H 'Authorization: Bearer <access_token>' -o output_file.zip

Here you can see the contents of the zip:

download_image

Contact Us