An assertion that a particular flight existed, rather than a personal log entry about the author. Only 'createdAt' is required. Every other field is optional, and absent means unknown or not applicable rather than empty or zero. The exception is 'relationship', where absent means no claim is being made. Records of the same flight written by different people are expected, so write the identifying fields consistently. Any kind of flying is in scope, and origin may equal destination.
tid
Timestamp-based ID
Properties
actualGateArrival
string
datetime
Optional
Actual 'in' time, reaching the gate or parking position. Explicit UTC offset, no fractional seconds.
actualGateDeparture
string
datetime
Optional
Actual 'out' time, leaving the gate or parking position. Explicit UTC offset, no fractional seconds.
actualLanding
string
datetime
Optional
Actual 'on' time, wheels on. Explicit UTC offset, no fractional seconds.
actualTakeoff
string
datetime
Optional
Actual 'off' time, wheels off. Explicit UTC offset, no fractional seconds.
aircraftType
string
Optional
Free-text aircraft type as the source expressed it, for example 'Boeing 737-800'. Not normalised and not reliable for matching. Several distinct ICAO designators can share one marketing name.
maxLength: 128 bytescabin
string
Optional
Cabin or class of service. An open string in lower camel case; the known values are not exhaustive.
maxLength: 64 byteseconomy, premiumEconomy, business, firstcallsign
string
Optional
The flight identification the aircraft broadcast, uppercase and exactly as transmitted. Holds the whole callsign, never a fragment of one. May be an operator designator followed by a flight number, a registration, or a string with no internal structure.
maxLength: 16 bytescreatedAt
string
datetime
Required
When this record was written, not when the flight happened. Explicit UTC offset, no fractional seconds.
date
string
Optional
Calendar date of departure at the origin, as 'YYYY-MM-DD'. Part of the identity key with 'operator' and 'flightNumber'. Must agree with any departure timestamp.
maxLength: 10 bytesdestination
ref
com.airplaneian.contrail.temp.defs#place
Optional
Where the flight arrived, or was intended to arrive if it was cancelled. If it diverted, this stays the intended destination and 'diversionAirport' holds where it landed.
diversionAirport
ref
com.airplaneian.contrail.temp.defs#place
Optional
Where the flight actually landed, when that was not 'destination'. Present only when 'status' is 'diverted'.
flightNumber
string
Optional
The operating agency's flight number, as a string. Digits only, without the operator prefix.
maxLength: 16 bytesicao24
string
Optional
The airframe's 24-bit ICAO address, six lowercase hexadecimal characters. With an actual departure time this is the identity key for flights with no flight number.
maxLength: 8 bytesicaoTypeDesignator
string
Optional
ICAO aircraft type designator, for example 'B77W'.
maxLength: 8 bytesmarketingAirline
string
Optional
ICAO designator of the airline that sold the flight, when it differs from 'operator'. Codeshares only.
maxLength: 8 bytesmarketingFlightNumber
string
Optional
Flight number under which the flight was sold, when it differs from 'flightNumber'.
maxLength: 16 bytesnotes
string
Optional
Free-text note. Public as soon as the record is written, and copies may persist after the record is deleted. Do not put booking references or other credentials here.
maxLength: 10000 bytesmaxGraphemes: 1000 graphemesoperator
string
Optional
ICAO designator of the agency that operated the flight, three letters, uppercase. Not airlines only: 'UAL', 'FDX', 'RCH'. Use 'operatorName' where no designator exists.
maxLength: 8 bytesoperatorName
string
Optional
Free-text name of the operating agency, for operators with no ICAO designator. Not reliable for matching. This is who flew the aircraft, which is often not who owns it.
maxLength: 128 bytesorigin
ref
com.airplaneian.contrail.temp.defs#place
Optional
Where the flight departed. May equal 'destination'; local flights are ordinary.
registeredOwner
string
Optional
Free-text name of the party the airframe is registered to. Often a trust or holding company, and frequently not the operator.
maxLength: 128 bytesregistration
string
Optional
Registration or tail number, uppercase with no hyphens or spaces, so that 'G-VBOW' and 'GVBOW' are one aircraft. Military and state identifiers go here too.
maxLength: 16 bytesrelationship
string
Optional
The author's connection to this flight. Absent means no claim is being made, unlike every other field where absent means unknown. An open string: the known values are not exhaustive.
maxLength: 64 bytespassenger, pic, sic, student, instructor, crew, observerroute
string
Optional
The route as filed, written as the flight plan expressed it, for example 'SSTIK2 SSTIK Q90 AVOSE'. Free text, not normalised and not reliable for matching. This is the planned route, not the flown track: a track belongs in a surveillance archive, which 'icao24' and a departure time are enough to query.
maxLength: 1000 bytesscheduledGateArrival
string
datetime
Optional
Scheduled 'in' time, reaching the gate or parking position. Explicit UTC offset, no fractional seconds.
scheduledGateDeparture
string
datetime
Optional
Scheduled 'out' time, leaving the gate or parking position. Explicit UTC offset, no fractional seconds.
scheduledLanding
string
datetime
Optional
Scheduled 'on' time, wheels on. Explicit UTC offset, no fractional seconds.
scheduledTakeoff
string
datetime
Optional
Scheduled 'off' time, wheels off. Explicit UTC offset, no fractional seconds.
seat
string
Optional
Seat occupied, as a string, for example '14C'.
maxLength: 16 bytessource
string
Optional
Short identifier for the tool or dataset that wrote this record, for example 'flighty', 'manual', or 'adsb'.
maxLength: 64 bytessourceId
string
Optional
That tool's own identifier for this flight. Kept in the record body rather than the record key, so a record can be corrected without becoming a new one. Meaningful only with 'source'.
maxLength: 512 bytesstatus
string
Optional
How the flight concluded. Absent means unknown, so write 'normal' explicitly when the flight operated as planned.
maxLength: 32 bytesnormal, cancelled, divertedView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"createdAt"
],
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "Calendar date of departure at the origin, as 'YYYY-MM-DD'. Part of the identity key with 'operator' and 'flightNumber'. Must agree with any departure timestamp."
},
"seat": {
"type": "string",
"maxLength": 16,
"description": "Seat occupied, as a string, for example '14C'."
},
"cabin": {
"type": "string",
"maxLength": 64,
"description": "Cabin or class of service. An open string in lower camel case; the known values are not exhaustive.",
"knownValues": [
"economy",
"premiumEconomy",
"business",
"first"
]
},
"notes": {
"type": "string",
"maxLength": 10000,
"description": "Free-text note. Public as soon as the record is written, and copies may persist after the record is deleted. Do not put booking references or other credentials here.",
"maxGraphemes": 1000
},
"route": {
"type": "string",
"maxLength": 1000,
"description": "The route as filed, written as the flight plan expressed it, for example 'SSTIK2 SSTIK Q90 AVOSE'. Free text, not normalised and not reliable for matching. This is the planned route, not the flown track: a track belongs in a surveillance archive, which 'icao24' and a departure time are enough to query."
},
"icao24": {
"type": "string",
"maxLength": 8,
"description": "The airframe's 24-bit ICAO address, six lowercase hexadecimal characters. With an actual departure time this is the identity key for flights with no flight number."
},
"origin": {
"ref": "com.airplaneian.contrail.temp.defs#place",
"type": "ref",
"description": "Where the flight departed. May equal 'destination'; local flights are ordinary."
},
"source": {
"type": "string",
"maxLength": 64,
"description": "Short identifier for the tool or dataset that wrote this record, for example 'flighty', 'manual', or 'adsb'."
},
"status": {
"type": "string",
"maxLength": 32,
"description": "How the flight concluded. Absent means unknown, so write 'normal' explicitly when the flight operated as planned.",
"knownValues": [
"normal",
"cancelled",
"diverted"
]
},
"callsign": {
"type": "string",
"maxLength": 16,
"description": "The flight identification the aircraft broadcast, uppercase and exactly as transmitted. Holds the whole callsign, never a fragment of one. May be an operator designator followed by a flight number, a registration, or a string with no internal structure."
},
"operator": {
"type": "string",
"maxLength": 8,
"description": "ICAO designator of the agency that operated the flight, three letters, uppercase. Not airlines only: 'UAL', 'FDX', 'RCH'. Use 'operatorName' where no designator exists."
},
"sourceId": {
"type": "string",
"maxLength": 512,
"description": "That tool's own identifier for this flight. Kept in the record body rather than the record key, so a record can be corrected without becoming a new one. Meaningful only with 'source'."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When this record was written, not when the flight happened. Explicit UTC offset, no fractional seconds."
},
"destination": {
"ref": "com.airplaneian.contrail.temp.defs#place",
"type": "ref",
"description": "Where the flight arrived, or was intended to arrive if it was cancelled. If it diverted, this stays the intended destination and 'diversionAirport' holds where it landed."
},
"aircraftType": {
"type": "string",
"maxLength": 128,
"description": "Free-text aircraft type as the source expressed it, for example 'Boeing 737-800'. Not normalised and not reliable for matching. Several distinct ICAO designators can share one marketing name."
},
"flightNumber": {
"type": "string",
"maxLength": 16,
"description": "The operating agency's flight number, as a string. Digits only, without the operator prefix."
},
"operatorName": {
"type": "string",
"maxLength": 128,
"description": "Free-text name of the operating agency, for operators with no ICAO designator. Not reliable for matching. This is who flew the aircraft, which is often not who owns it."
},
"registration": {
"type": "string",
"maxLength": 16,
"description": "Registration or tail number, uppercase with no hyphens or spaces, so that 'G-VBOW' and 'GVBOW' are one aircraft. Military and state identifiers go here too."
},
"relationship": {
"type": "string",
"maxLength": 64,
"description": "The author's connection to this flight. Absent means no claim is being made, unlike every other field where absent means unknown. An open string: the known values are not exhaustive.",
"knownValues": [
"passenger",
"pic",
"sic",
"student",
"instructor",
"crew",
"observer"
]
},
"actualLanding": {
"type": "string",
"format": "datetime",
"description": "Actual 'on' time, wheels on. Explicit UTC offset, no fractional seconds."
},
"actualTakeoff": {
"type": "string",
"format": "datetime",
"description": "Actual 'off' time, wheels off. Explicit UTC offset, no fractional seconds."
},
"registeredOwner": {
"type": "string",
"maxLength": 128,
"description": "Free-text name of the party the airframe is registered to. Often a trust or holding company, and frequently not the operator."
},
"diversionAirport": {
"ref": "com.airplaneian.contrail.temp.defs#place",
"type": "ref",
"description": "Where the flight actually landed, when that was not 'destination'. Present only when 'status' is 'diverted'."
},
"marketingAirline": {
"type": "string",
"maxLength": 8,
"description": "ICAO designator of the airline that sold the flight, when it differs from 'operator'. Codeshares only."
},
"scheduledLanding": {
"type": "string",
"format": "datetime",
"description": "Scheduled 'on' time, wheels on. Explicit UTC offset, no fractional seconds."
},
"scheduledTakeoff": {
"type": "string",
"format": "datetime",
"description": "Scheduled 'off' time, wheels off. Explicit UTC offset, no fractional seconds."
},
"actualGateArrival": {
"type": "string",
"format": "datetime",
"description": "Actual 'in' time, reaching the gate or parking position. Explicit UTC offset, no fractional seconds."
},
"icaoTypeDesignator": {
"type": "string",
"maxLength": 8,
"description": "ICAO aircraft type designator, for example 'B77W'."
},
"actualGateDeparture": {
"type": "string",
"format": "datetime",
"description": "Actual 'out' time, leaving the gate or parking position. Explicit UTC offset, no fractional seconds."
},
"scheduledGateArrival": {
"type": "string",
"format": "datetime",
"description": "Scheduled 'in' time, reaching the gate or parking position. Explicit UTC offset, no fractional seconds."
},
"marketingFlightNumber": {
"type": "string",
"maxLength": 16,
"description": "Flight number under which the flight was sold, when it differs from 'flightNumber'."
},
"scheduledGateDeparture": {
"type": "string",
"format": "datetime",
"description": "Scheduled 'out' time, leaving the gate or parking position. Explicit UTC offset, no fractional seconds."
}
}
},
"description": "An assertion that a particular flight existed, rather than a personal log entry about the author. Only 'createdAt' is required. Every other field is optional, and absent means unknown or not applicable rather than empty or zero. The exception is 'relationship', where absent means no claim is being made. Records of the same flight written by different people are expected, so write the identifying fields consistently. Any kind of flying is in scope, and origin may equal destination."
}