RBA Cash Rate: 4.35% · 1AUD = 0.67 USD · Inflation: 4.1%  
Leading Digital Marketing Experts | 1300 235 433 | Aggregation Enquires Welcome | Book Appointment
Example Interest Rates: Home Loan Variable: 5.38% (6.14%*) • Home Loan Fixed: 5.44% (6.26%*) • Fixed: 5.44% (6.26%*) • Variable: 5.38% (6.14%*) • Investment IO: 5.69% (6.52%*) • Investment PI: 5.49% (5.98%*)

NTSB Accident Database API

NTSB Accident Database API

As part of an ongoing look at the various APIs we make available to our clients, this article seeks to provide rudimentary details of our National Transport Safety Board (NTSB) Aviation Incident/Accident API. Not unlike our regional aircraft search engines - most of which we're yet to introduce - making these types of features available on flying school and other similar websites ensures return visitation, and it establishes your website as a definitive industry resource. Turning your website into a true information repository will inevitably increase page impressions, add to your SEO presence, add credibility, and ultimately convert far higher than your everyday pedestrian website.

While the NTSB data is a highly valuable standalone service, it was initially put together to support the FAA registration search engine (details of which are forthcoming).

Want access to this API? Like us on Facebook and it'll be made available to you.

The NTSB data is made freely available via their website. Once provided in a far more usable relational format (albeit, MS Access), they now provide a single CSV and XML file that compromises marginally on the ability to filter results. That said, we've managed to emulate most features of the former version of this API (we've used the current version for over a year). This is one API that will be built upon in coming months to support far more robust searches and other funky features. While the current version is 'adequate', it doesn't handle exclusions very well - a feature necessary when conducing accident analysis.

Data is updated nightly without any interruption to the service.

The Result

The API permits single results, browsing, searching, geographic searches, and statistics. Only basic features are described here.

Individual Events

For each incident and accident, the NTSB assigns a unique event_id, and it's this ID that we use to query individual results. Requesting ntsb.json?apikey=xxxxx&id=20140320X40839 unfolds into the following array:

1
Array
2
(
3
    [code] => 200
4
    [status] => 200
5
    [message] => OK
6
    [source] => BeliefMedia
7
    [api_version] => 0.2
8
    [data] => Array
9
        (
10
            [event_id] => 20140320X40839
11
            [investigation_type] => Accident
12
            [accident_number] => ERA14CA160
13
            [event_date] => Array
14
                (
15
                    [date] => 2014-03-08
16
                    [readable] => 8th March 2014
17
                )
18
 
19
            [general] => Array
20
                (
21
                    [broad_phase_flight] => LANDING
22
                    [weather_condition] => VMC
23
                    [aircraft_damage] => Substantial
24
                    [aircraft_category] => Airplane
25
                )
26
 
27
            [location] => Array
28
                (
29
                    [location] => Charlottesville, VA
30
                    [country] => United States
31
                    [latitude] => 38.139722
32
                    [longitude] => -78.452222
33
                    [airport_code] => CHO
34
                )
35
 
36
            [injury] => Array
37
                (
38
                    [injury_severity] => Non-Fatal
39
                    [total_fatal_injuries] => 0
40
                    [total_serious_injuries] => 0
41
                    [total_minor_injuries] => 0
42
                    [total_uninjured] => 1
43
                )
44
 
45
            [aircraft] => Array
46
                (
47
                    [registration_number] => N5423J
48
                    [make] => CESSNA
49
                    [model] => 172N
50
                    [amateur_built] => No
51
                    [number_engines] => 1
52
                    [engine_type] => Reciprocating
53
                )
54
 
55
            [operation] => Array
56
                (
57
                    [far_description] => Part 91: General Aviation
58
                    [schedule] =>
59
                    [purpose_flight] => Personal
60
                    [air_carrier] =>
61
                )
62
 
63
            [report] => Array
64
                (
65
                    [url] => https://www.ntsb.gov/_layouts/ntsb.aviation/brief.aspx?ev_id=20140320X40839
66
                    [report_status] => Probable Cause
67
                    [publication_date] => Array
68
                        (
69
                            [date] => 2015-07-08
70
                            [readable] => 8th July 2015
71
                        )
72
 
73
                )
74
 
75
            [summary] => Array
76
                (
77
                    [event_details] => NTSB investigators used data provided by various entities, including, but not limited to, the Federal Aviation Administration and/or the operator and did not travel in support of this investigation to prepare this aircraft accident report.According to the pilot, he established a "crab angle to track" the centerline of the runway and maintained about 70 knots on the final leg of the traffic pattern. He pulled the throttle to idle, began to flare the airplane, and the airplane touched down on the main wheels first. It became airborne again, touched down on the runway, and "bounced" a third time. Then, during the landing roll, the pilot was instructed by the air traffic controller to taxi to the ramp area. As the pilot attempted to maneuver the airplane, he realized that the nose landing gear was "rough" to handle. He notified air traffic control that he was having trouble with the landing gear, and the airplane was towed off the runway. During the accident sequence, the airplane incurred substantial damage to the firewall. The pilot reported no preimpact mechanical malfunctions or failures with the airplane that would have precluded normal operation. The wind reported at the airport around the time of the accident was calm.
78
                    [probable_cause] => The pilot's inadequate landing flare, which resulted in a bounced landing and substantial damage to the firewall.
79
                    [narrative] => According to the pilot, he established a "crab angle to track" the centerline of the runway and maintained about 70 knots on the final leg of the traffic pattern. He pulled the throttle to idle, began to flare the airplane, and the airplane touched down on the main wheels first. It became airborne again, touched down on the runway, and "bounced" a third time. Then, during the landing roll, the pilot was instructed by the air traffic controller to taxi to the ramp area. As the pilot attempted to maneuver the airplane, he realized that the nose landing gear was "rough" to handle. He notified air traffic control that he was having trouble with the landing gear, and the airplane was towed off the runway. During the accident sequence, the airplane incurred substantial damage to the firewall. The pilot reported no preimpact mechanical malfunctions or failures with the airplane that would have precluded normal operation. The wind reported at the airport around the time of the accident was calm.
80
                )
81
 
82
            [data_source] => NTSB
83
            [last_update_check] => 2018-04-12
84
        )
85
 
86
)

All fields are shows regardless whether they have a corresponding value.

Browsing Results

Browsing requests are made to ntsb.json?apikey=xxxxx&type=browsing (the type=browsing is assumed if no other type or event ID is provided). The result, with most recent events listed first, is as follows:

1
Array
2
(
3
    [code] => 200
4
    [status] => 200
5
    [message] => OK
6
    [source] => BeliefMedia
7
    [api_version] => 0.2
8
    [page] => 1
9
    [number] => 30
10
    [pages] => 2713
11
    [total] => 81361
12
    [search] => Array
13
        (
14
            [type] => browse
15
        )
16
 
17
    [results] => Array
18
        (
19
            [0] => Array
20
                (
21
                    [event_id] => 20180402X73754
22
                    [accident_number] => GAA18CA196
23
                    [aircraft] => Array
24
                        (
25
                            [registration_number] => N711XC
26
                            [make] => CUB CRAFTERS INC
27
                            [model] => CC19
28
                        )
29
 
30
                    [details] => Array
31
                        (
32
                            [event_date] => 2018-04-01
33
                            [location] => Seldovia, AK
34
                            [purpose_flight] => Instructional
35
                        )
36
 
37
                )
38
 
39
            [1] => Array
40
                (
41
                    [event_id] => 20180401X75919
42
                    [accident_number] => GAA18CA193
43
                    [aircraft] => Array
44
                        (
45
                            [registration_number] => N297PA
46
                            [make] => PIPER
47
                            [model] => PA28
48
                        )
49
 
50
                    [details] => Array
51
                        (
52
                            [event_date] => 2018-04-01
53
                            [location] => Phoenix, AZ
54
                            [purpose_flight] => Instructional
55
                        )
56
 
57
                )  [.. SNIP ..]

As is the case with all results, alter the order that results are listed with order=asc or order=desc. Pagination is determined by the parameters of pg (the page to return) and number (the number of results on each page).

Searching

You may search upon any of the field values listed in the array below. Distinct field values are listed at the bottom of this page.

1
$permitted_fields = array('event_date_start', 'event_date_end', 'location', 'country', 'airport_code', 'airport_name', 'injury_severity', 'aircraft_damage', 'aircraft_category', 'registration_number', 'make', 'model', 'amateur_built', 'number_engines', 'engine_type', 'schedule', 'purpose_flight', 'air_carrier', 'weather_condition', 'broad_phase_flight');</pre>
2
 
3
Request should be made to <code>ntsb.json?apikey=xxxxx&type=search&event_date_start=20121015&broad_phase_flight=landing</code>. In this case the result unfolds as follows:
4
 
5
1
<?php
Array
6
(
7
    [code] => 200
8
    [status] => 200
9
    [message] => OK
10
    [source] => BeliefMedia
11
    [api_version] => 0.2
12
    [page] => 1
13
    [number] => 30
14
    [pages] => 75
15
    [total] => 2226
16
    [search] => Array
17
        (
18
            [type] => search
19
            [params] => Array
20
                (
21
                    [event_date_start] => 2012-10-15
22
                    [broad_phase_flight] => landing
23
                )
24
 
25
        )
26
 
27
    [results] => Array
28
        (
29
            [0] => Array
30
                (
31
                    [event_id] => 20180323X42038
32
                    [accident_number] => ERA18LA115
33
                    [aircraft] => Array
34
                        (
35
                            [registration_number] => N77NP
36
                            [make] => CESSNA
37
                            [model] => 180K
38
                        )
39
 
40
                    [details] => Array
41
                        (
42
                            [event_date] => 2018-03-23
43
                            [location] => Canton, MS
44
                            [purpose_flight] => Personal
45
                        )
46
 
47
                )
48
 
49
            [1] => Array
50
                (
51
                    [event_id] => 20180327X15528
52
                    [accident_number] => CEN18LA128
53
                    [aircraft] => Array
54
                        (
55
                            [registration_number] => N372WP
56
                            [make] => CESSNA
57
                            [model] => 310R
58
                        )
59
 
60
                    [details] => Array
61
                        (
62
                            [event_date] => 2018-03-22
63
                            [location] => Kansas City, MO
64
                            [purpose_flight] => Personal
65
                        )
66
 
67
                ) [.. SNIP ..]

Searching by date field (event_date_start, event_date_end) is made via a 6-figure time group (YYMMDD) or in the following exact format: 12-april-2015 (or DD-month-YYYY).

Geographic Searches

Geographic searches are conducted in the same manner as standard searches with the addition of a geo parameter. The geo value is formatted as a comma delimited string as follows: geo=latitude,longitude,range (note no spaces). Querying ntsb.json?apikey=xxxxx&type=search&geo=35.00,-101.705833,100&make=piper returns the following:

1
Array
2
(
3
    [code] => 200
4
    [status] => 200
5
    [message] => OK
6
    [source] => BeliefMedia
7
    [api_version] => 0.2
8
    [page] => 1
9
    [number] => 30
10
    [pages] => 1
11
    [total] => 22
12
    [search] => Array
13
        (
14
            [type] => search
15
            [params] => Array
16
                (
17
                    [latitude] => 35.00
18
                    [longitude] => -101.705833
19
                    [range] => 100 nm
20
                    [make] => piper
21
                )
22
 
23
        )
24
 
25
    [results] => Array
26
        (
27
            [0] => Array
28
                (
29
                    [event_id] => 20160705X80153
30
                    [accident_number] => GAA16CA359
31
                    [geo] => Array
32
                        (
33
                            [latitide] => 35.158611
34
                            [longitude] => -101.840555
35
                            [distance] => Array
36
                                (
37
                                    [nm] => 11.597
38
                                    [km] => 21.479
39
                                    [m] => 13.346
40
                                )
41
 
42
                        )
43
 
44
                    [aircraft] => Array
45
                        (
46
                            [registration_number] => N5724F
47
                            [make] => PIPER
48
                            [model] => PA28
49
                        )
50
 
51
                    [details] => Array
52
                        (
53
                            [event_date] => 2016-06-30
54
                            [location] => Amarillo, TX
55
                            [purpose_flight] => Personal
56
                        )
57
 
58
                )
59
 
60
            [1] => Array
61
                (
62
                    [event_id] => 20031120X01931
63
                    [accident_number] => FTW04LA018
64
                    [geo] => Array
65
                        (
66
                            [latitide] => 35.170000
67
                            [longitude] => -101.825834
68
                            [distance] => Array
69
                                (
70
                                    [nm] => 11.787
71
                                    [km] => 21.83
72
                                    [m] => 13.565
73
                                )
74
 
75
                        )
76
 
77
                    [aircraft] => Array
78
                        (
79
                            [registration_number] => N5203W
80
            [.. SNIP ..]

The accepted range value is in nautical miles although we return the data with kilometers and miles. Should the geographic string fail to validate, the results are returned without the distance data.

Statistics

Statistic results can be queried for all of the accepted search parameters. An example result for broad_phase_flight related accidents is constructed as follows: ntsb.json?apikey=xxxxx&type=stats&field=broad_phase_flight. We accept multiple parameters but usage is beyond the scope of this article. Generally speaking, stats can be returned based on any number of fields. Additionally, data is returned in various formats designed for most common graphing applications.

1
Array
2
(
3
    [code] => 200
4
    [status] => 200
5
    [message] => OK
6
    [source] => BeliefMedia
7
    [api_version] => 0.2
8
    [page] => 1
9
    [number] => 30
10
    [pages] =>
11
    [total] =>
12
    [search] => Array
13
        (
14
            [type] => stats
15
            [field] => broad_phase_flight
16
        )
17
 
18
    [results] => Array
19
        (
20
            [key_value] => Array
21
                (
22
                    [LANDING] => 19815
23
                    [TAKEOFF] => 15676
24
                    [CRUISE] => 10879
25
                    [MANEUVERING] => 10062
26
                    [APPROACH] => 7922
27
                    [TAXI] => 2386
28
                    [CLIMB] => 2320
29
                    [DESCENT] => 2247
30
                    [GO_AROUND] => 1655
31
                    [STANDING] => 1260
32
                    [UNKNOWN] => 717
33
                    [OTHER] => 163
34
                )
35
 
36
            [array] => Array
37
                (
38
                    [0] => Array
39
                        (
40
                            [broad_phase_flight] => LANDING
41
                            [count] => 19815
42
                        )
43
 
44
                    [1] => Array
45
                        (
46
                            [broad_phase_flight] => TAKEOFF
47
                            [count] => 15676
48
                        )
49
    [.. SNIP ..]

Sorting & Downloading Data

In all cases where multiple results are returned, using order=asc or order=desc reorders the results by date. If you would like to download a CSV file, use &download=csv in your URL request.

The Next Version

We tend to use this database reasonably often in the course of our everyday aviation-related work. In light of our own experience, and based on occasional feedback, we'll be releasing the next version soon that includes searching upon any field with AND, OR, and NOT functionality. This API does support 'NOT' exclusions but it was added as an afterthought to test a few features, so it's best not used in the live environment. However, if you want to play with results, using an underscore before any search value equates to 'does not include'.

Data Fields

The following descriptors are sourced from the NTSB website . The query fields we use for searching are returned alongside the field description.

If you're building forms for searching, the entire list of distinct fields can be downloaded via ntsb.json?apikey=xxxxx&type=field_list. The resulting JSON returns every distinct value for every searchable field.

Event ID event_id

The Event ID is a 14-character alphanumeric identifier for each incident/accident. Individual aircraft records require use of this unique code (eg: id=20180402X73754).

Investigation Type investigation_type

The type is either incident or accident. Refers to a regulatory definition of the event severity. The severity of a general aviation accident or incident is classified as the combination of the highest level of injury sustained by the personnel involved (that is, fatal, serious, minor, or none) and level of damage to the aircraft involved (that is, destroyed, substantial, minor, or none).

1
$permitted_investigation_type = array('Accident', 'Incident');

Accident Number accident_number

Each accident/incident is assigned a unique case number by the NTSB. This number is used as a reference in all documents referring to the event. The first 3 characters are a letter abbreviation of the NTSB office that filed the report. The next 2 numbers represent the fiscal year in which the accident occurred. The next two letters indicate the investigation category (Major, Limited, etc) and mode (Aviation, Marine, etc). The next three digits indicate the chronological sequence in which the case was created within the given fiscal year. And a final letter (A, B, C, etc) may exist if the event involved multiple aircraft.

Event Date event_date

The date of the event. The raw data supplied by the NTSB is in the format MM/DD/YYYY. We convert it into various other formats for display and search purposes.

Location location

The city or place location closest to the site of the event.

Country country

The country in which the event took place.

Latitude and Longitude latitude & longitude

From the NTSB: "Latitude and longitude are entered for the event site in degrees and decimal degrees. If the event occurred on an airport, the published coordinates for that airport can be entered. If the event was not on an airport, position coordinates may be obtained using Global Positioning System equipment or nearest known reading." We return the latitude and longitude in decimal and long formats with accident details (when available).

Airport Code airport_code

Airport code if the event took place within 3 miles of an airport, or the involved aircraft was taking off from, or on approach to, an airport.

Airport Name airport_name

Airport name if the event took place within 3 miles of an airport, or the involved aircraft was taking off from, or on approach to, an airport.

Injury Severity injury_severity

Indicate the highest level of injury among all injuries sustained as a result of the event.

Aircraft Damage aircraft_damage

Indicate the severity of damage to the accident aircraft. For the purposes of this variable, aircraft damage categories are defined in 49 CFR 830.2.

1
$permitted_aircraft_damage = array('Aircraft Damage', 'Substantial', 'Destroyed', 'Minor');

Aircraft Category aircraft_category

The category of the involved aircraft. In this case, the definition of aircraft category is the same as that used with respect to the certification, ratings, privileges, and limitations of airmen. Also note that there is some overlap of category and class in the available choices.

1
$permitted_aircraft_category = array('Airplane', 'Balloon', 'Gyroplane', 'Glider', 'Helicopter', 'Weight-Shift', 'Powered Parachute', 'Ultralight', 'Blimp', 'Unknown', 'Powered-Lift', 'Gyrocraft', 'Rocket');

Registration Number registration_number

The full registration (tail) number of the involved aircraft, including the International Civil Aviation Organization (ICAO) country prefix. Note: the prefix for US registered aircraft is "N".

Make make

Name of the manufacturer of the involved aircraft.

Model model

The full alphanumeric aircraft model code, including any applicable series or derivative identifiers. For example, a 200 series Boeing 737 is entered as 737-200.

Amateur Built amateur_built

Aircraft is a homebuilt (Y/N).

1
$permitted_amateur_built = array('Yes', 'No');

Number of Engines number_engines

The total number of engines on the accident aircraft. Permitted values are 0, 1, 2, 3, 4

Engine Type engine_type

Type of engine(s) on the involved aircraft.

1
$permitted_engine_type = array('Reciprocating', 'Turbo Prop', 'Turbo Shaft', 'Turbo Fan', 'Unknown', 'None', 'Electric', 'Turbo Jet', 'REC, ELEC', 'Hybrid Rocket', 'REC, TJ, TJ', 'REC, TJ, REC, TJ', 'TJ, REC, REC, TJ')

FAR Description far_description

The applicable regulation part (14 CFR) or authority the aircraft was operating under at the time of the accident.

1
$permitted_far_description = array('Part 91: General Aviation', 'Part 135: Air Taxi & Commuter', 'Part 137: Agricultural', 'Part 133: Rotorcraft Ext. Load', 'Non-U.S., Commercial', 'Non-U.S., Non-Commercial', 'Part 121: Air Carrier', 'Unknown', 'Public Aircraft', 'Part 129: Foreign', 'Part 103: Ultralight', 'Armed Forces', 'Part 107: Small UAS', 'Part 91 Subpart K: Fractional', 'Public Use', 'Part 437: Commercial Space Flight', 'Part 125: 20+ Pax,6000+ lbs', 'Part 91F: Special Flt Ops.');

Schedule schedule

If the accident aircraft was conducting air carrier operations under 14 CFR 121, 125, 129, or 135, indicate whether it was operating as a "scheduled or commuter" air carrier or as a "non-scheduled or air taxi" carrier. Permitted values are empty, NSCH, SCHD, and UNK.

Purpose of Flight purpose_flight

If the accident aircraft was operating under 14 CFR part 91,103,133, or 137, this was the primary purpose of flight.

1
$permitted_purpose_flight = array('Instructional', 'Personal', 'Aerial Application', 'Aerial Observation', 'Business', 'External Load', 'Ferry', 'Glider Tow', 'Flight Test', 'Other Work Use', 'Positioning', 'Unknown', 'Public Aircraft', 'Air Drop', 'Air Race/Show', 'Executive/Corporate', 'Public Aircraft - Local', 'Banner Tow', 'Public Aircraft - Federal', 'Public Aircraft - State', 'Firefighting', 'Skydiving');

Air Carrier air_carrier

The full name of the operator of the accident aircraft. This typically refers to an organization or group (e.g., airline or corporation) rather than the pilot; contanated with the carrier, business, or code share name if the accident aircraft was operated by a business, air carrier, or as part of a code share agreement.

Total Fatal Injuries total_fatal_injuries

The total number of fatal injuries from an event.

Total Serious Injuries total_serious_injuries

The total number of serious injuries from an event.

Total Uninjured total_uninjured

The total number of non-injuries from an event.

Weather Condition weather_condition

The basic weather conditions at the time of the event. Permitted values are VMC, IMC, and UNK.

Broad Phase of Flight broad_phase_flight

All occurrences include information about the phase of flight in which the occurrence took place. Phase of flight refers to the point in the aircraft operation profile in which the event occurred.

1
$permitted_broad_phase_flight = array('APPROACH', 'TAXI', 'MANEUVERING', 'TAKEOFF', 'LANDING', 'STANDING', 'CRUISE', 'CLIMB', 'DESCENT', 'UNKNOWN', 'GO-AROUND', 'OTHER');

Report Status report_status

The furthest level to which a report has been completed.

1
$permitted_report_status = array('Preliminary', 'Foreign', 'Factual', 'Probable Cause');

Publication Date publication_date

The date on which the previous column (Report Status) was published to the web.

Brief & Narrative Details

Unavailable via the standard NTSB data, the narrative details (event, probably cause, and narrative) are a summary of the incident or accident as published on the NTSB website. It cannot be relied upon for accuracy.

Considerations

As stated, the API is undergoing a rebuild. In the meantime, if there's any particular feature you'd like to see us build into the service, please let us know.

While we generally build a client WordPress plugin for each source in our arsenal, the NTSB API is one source that we've neglected. That said, when we update the API we'll ensure there's a plugin to accompany it.

■ ■ ■

 
Download our complimentary 650-page guide on marketing for mortgage brokers. We'll show you exactly how we generate billions in volume for our clients.
Finance Guide, Cropped Top and Bottom
  Timezone: 1 · [ CHANGE ]

RELATED READING

Like this article?

Share on Facebook
Share on Twitter
Share on Linkdin
Share on Pinterest

Leave a comment