Welcome to the ARINC Digital Exchange

The ARINC Digital Exchange facilitates participants to connect and discover new ways to experience and utilize aviation data. It empowers cross industry collaboration and the creativity you need to build innovative solutions. Register to quickly become part of a digitally enabled aviation community.

Create an Account

ARINC Digital Exchange participation is currently by invitation only. If you are a member of our trial program, please check your inbox for a registration email from us. Inside you will find instructions to create a Digital Exchange account. If you are unable to find, or no longer have your registration email, please contact us.

If you would like a demo of the Digital Exchange, please submit a request so we can contact you with more information.

I want to demo the ARINC Digital Exchange

Information about each data product can be found on the product overview page. Each API end point contains interactive documentation for you to make requests and receive sample responses.

Before you're able to receive responses from the interactive docs, you will need to generate an oAuth token.

Integrate APIs into Your App

In this section you will find steps for adding our APIs to your applications.

Create an App

To create an app, first go to the My Keys page and click the "Add a New Key" button. Complete the form, selecting the APIs you are interested in. You may select as many APIs as you need for your app as well as remove and/or add them as necessary.

There is no need to create individual apps for each API you want to use. All the products included within the app will use the same keys for authentication without effecting the price.

Access your Keys

After you have created your app, a new one should appear on your My Keys page. Clicking on your app will open the administration panel. You will find your Consumer Key and Secret in the "Key" section. The combination of these keys will be used to request oAuth tokens for authentication.

Call the API

Get an oAuth Token

Before making a request to any API endpoints, you will need to request an oAuth token. Without the token the APIs will return a 401 unauthorized error. Included below are code snippets in several languages that explain how to acquire a token using your credentials.

curl --request POST \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data 'grant_type=client_credentials&client_id="your client_id"&client_secret="your client_secret"' \
    https://collins-datamarket-np-test.apigee.net/v1/oauth/token
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import org.json.JSONObject;

public class App {
    public static void main(String[] args) throws Exception {
        String client_id = "your client_id";
        String client_secret = "your client_secret";

        JSONObject oAuth_token = getoAuthToken();
    }

    private static JSONObject getoAuthToken(String ID, String SECRET) throws Exception {
        URL token_url = new URL("https://collins-datamarket-np-test.apigee.net/v1/oauth/token");
        String data = "grant_type=client_credentials" + "&client_id=" + ID + "&client_secret=" + SECRET;

        // This example uses the java.net.HttpURLConnection library
        HttpURLConnection request = null;
        try {
            request = (HttpURLConnection) token_url.openConnection();
            request.setRequestMethod("POST");
            request.setDoOutput(true);
            request.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            OutputStream add_data_to_request = request.getOutputStream();
            add_data_to_request.write(data.getBytes());
            add_data_to_request.flush();

            BufferedReader response = new BufferedReader(new InputStreamReader(request.getInputStream()));
            request.disconnect();

            return readToJSONObject(response);
        } catch (Exception e) {
            // Most common error here will be unauthorized. Which means the credentials are invalid
            BufferedReader error = new BufferedReader(new InputStreamReader(request.getErrorStream()));
            JSONObject errObject = readToJSONObject(error);
            request.disconnect();
            throw new Exception(errObject.toString());
        }
    }

    // Our APIs respond with JSON objects. Java does not handle JSON out of box.
    // You will need to implement your own JSON handler. This example uses the
    // org.json.JSONObject library
    private static JSONObject readToJSONObject(BufferedReader br) throws IOException {
        StringBuilder outputText = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            outputText.append(line);
        }
        return new JSONObject(outputText.toString());
    }
}
// This example uses the axios module for http requests
// Other modules are available with similar functionality to axios
// Refer to https://github.com/axios/axios for more info
var axios = require("axios");
var querystring = require("querystring");

var client_id = "your client_id";
var client_secret = "your client_secret";

// receive oAuth token at https://collins-datamarket-np-test.apigee.net/v1/oauth/token
// pass client information as a data object
async function getoAuthToken(ID, SECRET) {
  // must pass data in this format
  var token_url =
    "https://collins-datamarket-np-test.apigee.net/v1/oauth/token";
  var data = {
    grant_type: "client_credentials",
    client_id: ID,
    client_secret: SECRET
  };

  return await axios({
    method: "post",
    url: token_url,
    data: querystring.stringify(data)
  })
    .then(function(response) {
      return response.data;
    })
    .catch(function(error) {
      // Most common error here will be unauthorized. Which means the credentials are invalid
      error = error.response.data;
      throw new Error("ERROR: " + error.error + "! " + error.message);
    });
}

// NOTE: waiting for the response will require asynchronous logic
var oAuth_token = await getoAuthToken(client_id, client_secret); 
# This example uses the python requests library for http requests
# Other libraries are available with similar functionality 
# Refer to https://realpython.com/python-requests/ for more info 
import requests

client_id = "your client_id"
client_secret = "your client_secret"

# receive oAuth token at https://collins-datamarket-np-test.apigee.net/v1/oauth/token
# pass client information as a data object
def getoAuthToken(ID, SECRET):
    token_url = "https://collins-datamarket-np-test.apigee.net/v1/oauth/token"
    data = {
        'grant_type': 'client_credentials',
        'client_id': ID,
        'client_secret': SECRET
    }
    response = requests.post(url=token_url, data=data)

    # status_code == 200 if credentials accepted
    if (response.status_code == 200):
        return response.json()
    else:
        error_response = response.json()
        # Most common error here will be unauthorized. Which means the credentials are invalid
        raise Exception("ERROR: {}! {}.".format(error_response["error"], error_response["message"]))

oAuth_token = getoAuthToken(client_id, client_secret)

Make a call

Once you've acquired an oAuth token you will be able to call any APIs you selected for your app. When calling an API endpoint, you will need to pass the token type and access token properties from the received oAuth token as an Authorization header within the HTTP request. The Token type will always be 'Bearer'. Examples for calling an API endpoint with the oAuth token are provided below.

The Authorization header will need to be formatted as "Bearer access token" (ex. "Bearer l7EAm9mBIMOXAMfshjVIrq9LxCAJ").

# Curl request for Airlines API
curl --request GET \
  --header 'Authorization: Bearer "oAuth access_token"' \
  https://collins-datamarket-np-dev.apigee.net/v1/airlines    
# This example uses the python requests library for http requests
# Other libraries are available with similar functionality 
# Refer to https://realpython.com/python-requests/ for more info 
import requests

oAuth_token = getoAuthToken(client_id, client_secret)

# Example get request to airlines endpoint
def getAirlinesAPI(token):
    if token == None:
        raise Exception("ERROR: No oAuth Token!")
    
    path = "http://collins-datamarket-np-test.apigee.net/v1/airlines"
    # the oAuth token object will has attributes token_type and access_token
    # these need to be passed to the Authorization header in the format below
    headers = {
        'Authorization': token["token_type"] + " " + token["access_token"]
    }
    response = requests.get(url=path, headers=headers)

    # status_code = 200 if successful
    if (response.status_code == 200):
        return response.json()
    else:
        error_response = response.json()
        # If your token is no longer valid, you would need request a new oAuth token.
        # This would be indicated an Unauthorized error. Tokens last for 1hr.
        raise Exception("ERROR: {}! {}.".format(error_response["error"], error_response["message"]))

# airlines will be a dictionary
airlines = getAirlinesAPI(oAuth_token)

// This example uses the axios module for http requests
// Other modules are available with similar functionality to axios
// Refer to https://github.com/axios/axios for more info
var axios = require("axios");

var oAuth_token = await getoAuthToken(client_id, client_secret);

// Example get request to airlines endpoint
async function getAirlinesAPI(token) {
  if (!token) {
    throw new Error("ERROR: No oAuth Token");
  }
  var path = "http://collins-datamarket-np-test.apigee.net/v1/airlines";

  // the oAuth token object will has attributes token_type and access_token
  // these need to be passed to the Authorization header in the format below
  var headers = {
    Authorization: token["token_type"] + " " + token["access_token"]
  };

  var response = await axios({
    method: "get",
    url: path,
    headers: headers
  })
    .then(function(response) {
      return response.data;
    })
    .catch(function(error) {
      // If your token is no longer valid, you would need request a new oAuth token.
      // This would be indicated an Unauthorized error. Tokens last for 1hr.
      error = error.response.data;
      throw new Error("ERROR: " + error.error + "! " + error.message);
    });

  return response;
}

// NOTE: waiting for the response will require asynchronous logic
// airlines will be a JSON object
var airlines = await getAirlinesAPI(oAuth_token);
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import org.json.JSONObject;

public class App {
    public static void main(String[] args) throws Exception {
        JSONObject oAuth_token = getoAuthToken(client_id, client_secret);
        JSONObject airlines = getAirlinesAPI(oAuth_token);
    }

    private static JSONObject getAirlinesAPI(JSONObject oAuth_token) throws Exception {
        if (oAuth_token == null) {
            throw new Exception("ERROR: No oAuth token provided");
        }

        URL path = new URL("http://collins-datamarket-np-test.apigee.net/v1/airlines");
        String authorization_header = oAuth_token.getString("token_type") + " " + oAuth_token.getString("access_token");
        HttpURLConnection request = null;
        try {
            request = (HttpURLConnection) path.openConnection();
            request.setRequestMethod("GET");
            request.setRequestProperty("Authorization", authorization_header);

            BufferedReader response = new BufferedReader(new InputStreamReader(request.getInputStream()));

            return readToJSONObject(response);
        } catch (Exception e) {
            BufferedReader error = new BufferedReader(new InputStreamReader(request.getErrorStream()));
            JSONObject errObject = readToJSONObject(error);
            request.disconnect();
            throw new Exception(errObject.toString());
        }
    }

    // Our APIs respond with JSON objects. Java does not handle JSON out of box.
    // You will need to implement your own JSON handler. This example uses the
    // org.json.JSONObject library
    private static JSONObject readToJSONObject(BufferedReader br) throws IOException {
        StringBuilder outputText = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            outputText.append(line);
        }
        return new JSONObject(outputText.toString());
    }
}

Read the Response

All of the APIs will respond with data in the form of a JSON object. Not all languages can read a JSON object with their core functionality. In this case, you will need to find an extension library to handle the JSON object or implement your own JSON handler.

To view the structure of a specific API response, please refer to the API's documentation.

View API Analytics

You can easily view your API product utilization analytics on the ARINC Digital Exchange. To find usage data relating to your APIs, go to the My Keys page and open the app you are interested in learning about. Select "Analytics" from the app administration widget. From there, you will be able to view your usage data, including throughput, response times and errors.

Provide Feedback

We are always interested in learning how to improve the ARINC Digital Exchange experience. Fill out this form to send us your thoughts and ideas and we'll respond to you within 48 hours. Thank you in advance for helping us create the best possible Digital Exchange experience.