Find an API

Search public APIs with auth details & Postman guides

← All APIs

Transport Canada Aviation Safety Data API

tc.gc.ca · Government

Government API Key Free & Open Government Transportation & Logistics Insurance Aviation Safety Incidents

Open data APIs and datasets from Transport Canada covering aviation safety incident reports, aircraft registry, pilot licenses, aerodrome data, and aviation accident statistics from the Transportation Safety Board of Canada (TSB). Used by aviation insurers, fleet operators, and safety analysts. Also includes marine and rail incident data for multi-modal transport risk assessment.

Authentication

API Key API key required for Transport Canada developer API. Register at api.canada.ca. Separate open data files available without authentication from open.canada.ca.

Parameter name: X-TC-API-Key (in header)

Sample Requests

GET Search aircraft registry

Searches the Canadian Civil Aircraft Register for aircraft by registration mark, serial number, or owner name.

https://tc.api.canada.ca/tc/v1/aircraft/registry?pageSize=10&registration=C-FXXX

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
X-TC-API-Key auth YOUR_API_KEY
curl -X GET "https://tc.api.canada.ca/tc/v1/aircraft/registry?pageSize=10&registration=C-FXXX" \
  -H "X-TC-API-Key: YOUR_API_KEY"
import requests
params = {
    "pageSize": "10",
    "registration": "C-FXXX"
}
headers = {
    "X-TC-API-Key": "YOUR_API_KEY"
}
response = requests.get(
    "https://tc.api.canada.ca/tc/v1/aircraft/registry",
    params=params,
    headers=headers,
)
print(response.json())
const url = new URL('https://tc.api.canada.ca/tc/v1/aircraft/registry');
url.searchParams.set('pageSize', '10');
url.searchParams.set('registration', 'C-FXXX');

const response = await fetch(url, {
  headers: {
    'X-TC-API-Key': 'YOUR_API_KEY'
  },
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://tc.api.canada.ca/tc/v1/aircraft/registry")
	q := baseURL.Query()
	q.Set("pageSize", "10")
	q.Set("registration", "C-FXXX")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)
	req.Header.Set("X-TC-API-Key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://tc.api.canada.ca/tc/v1/aircraft/registry")
uri.query = URI.encode_www_form({
  "pageSize" => "10",
  "registration" => "C-FXXX"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)
req["X-TC-API-Key"] = "YOUR_API_KEY"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://tc.api.canada.ca/tc/v1/aircraft/registry?" . http_build_query([
    "pageSize" => "10",
    "registration" => "C-FXXX"
]);
$opts = ["http" => [
    "method" => "GET",
    "header" => implode("\r\n", [
        "X-TC-API-Key: YOUR_API_KEY"
    ]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Get TSB accident reports

Returns Transportation Safety Board aviation accident and incident reports by date range, province, or aircraft type.

https://tc.api.canada.ca/tc/v1/safety/accidents?mode=Aviation&dateTo=2023-12-31&dateFrom=2023-01-01&province=BC

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
X-TC-API-Key auth YOUR_API_KEY
curl -X GET "https://tc.api.canada.ca/tc/v1/safety/accidents?mode=Aviation&dateTo=2023-12-31&dateFrom=2023-01-01&province=BC" \
  -H "X-TC-API-Key: YOUR_API_KEY"
import requests
params = {
    "mode": "Aviation",
    "dateTo": "2023-12-31",
    "dateFrom": "2023-01-01",
    "province": "BC"
}
headers = {
    "X-TC-API-Key": "YOUR_API_KEY"
}
response = requests.get(
    "https://tc.api.canada.ca/tc/v1/safety/accidents",
    params=params,
    headers=headers,
)
print(response.json())
const url = new URL('https://tc.api.canada.ca/tc/v1/safety/accidents');
url.searchParams.set('mode', 'Aviation');
url.searchParams.set('dateTo', '2023-12-31');
url.searchParams.set('dateFrom', '2023-01-01');
url.searchParams.set('province', 'BC');

const response = await fetch(url, {
  headers: {
    'X-TC-API-Key': 'YOUR_API_KEY'
  },
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://tc.api.canada.ca/tc/v1/safety/accidents")
	q := baseURL.Query()
	q.Set("mode", "Aviation")
	q.Set("dateTo", "2023-12-31")
	q.Set("dateFrom", "2023-01-01")
	q.Set("province", "BC")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)
	req.Header.Set("X-TC-API-Key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://tc.api.canada.ca/tc/v1/safety/accidents")
uri.query = URI.encode_www_form({
  "mode" => "Aviation",
  "dateTo" => "2023-12-31",
  "dateFrom" => "2023-01-01",
  "province" => "BC"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)
req["X-TC-API-Key"] = "YOUR_API_KEY"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://tc.api.canada.ca/tc/v1/safety/accidents?" . http_build_query([
    "mode" => "Aviation",
    "dateTo" => "2023-12-31",
    "dateFrom" => "2023-01-01",
    "province" => "BC"
]);
$opts = ["http" => [
    "method" => "GET",
    "header" => implode("\r\n", [
        "X-TC-API-Key: YOUR_API_KEY"
    ]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. Register for Transport Canada API access at api.canada.ca
  2. Many Transport Canada datasets are also available without API key at open.canada.ca
  3. Canadian Civil Aircraft Register (CCAR) searchable at wwwapps.tc.gc.ca/saf-sec-sur/2
  4. TSB (Transportation Safety Board) safety data: bst-tsb.gc.ca/stats
  5. Marine safety data: Transport Canada vessel registry at wwwapps.tc.gc.ca/saf-sec-sur/4
  6. NOTAM and aeronautical data: NavCanada provides separate AIS API at www.navcanada.ca

What can you build with Transport Canada Aviation Safety Data API?

Transport Canada Aviation Safety Data API is a Government API. Developers commonly use government APIs for:

  • surfacing public datasets in citizen-facing apps
  • building transparency and civic engagement tools
  • accessing legislation, court records, and official data
  • powering research and journalism tools
  • creating compliance and regulatory monitoring dashboards

API Key authentication. You'll receive a key after signing up. Send it with every request — in a header or query parameter. Keep it out of client-side code and never commit it to version control. Transport Canada Aviation Safety Data API is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗