Transport Canada Aviation Safety Data API
tc.gc.ca · Government
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
Parameter name: X-TC-API-Key (in header)
Sample Requests
Searches the Canadian Civil Aircraft Register for aircraft by registration mark, serial number, or owner name.
Hover any highlighted part to learn what it does
| X-TC-API-Key auth | YOUR_API_KEY |
curl -X GET "https://tc.api.canada.ca/tc/v1/aircraft/registry?pageSize=10®istration=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));Returns Transportation Safety Board aviation accident and incident reports by date range, province, or aircraft type.
Hover any highlighted part to learn what it does
| 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
- Register for Transport Canada API access at api.canada.ca
- Many Transport Canada datasets are also available without API key at open.canada.ca
- Canadian Civil Aircraft Register (CCAR) searchable at wwwapps.tc.gc.ca/saf-sec-sur/2
- TSB (Transportation Safety Board) safety data: bst-tsb.gc.ca/stats
- Marine safety data: Transport Canada vessel registry at wwwapps.tc.gc.ca/saf-sec-sur/4
- 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?