Skip to main content
POST
Create a new sales / lease / exchange owned by your organization. These represent whole aircraft, engines, or APUs your team is offering for sale, lease, or exchange.
The public API supports listing_type of aircraft, engine, or apu only. parts and landing_gear are intentionally excluded from the public surface today — existing rows of those types stay readable on GET, but cannot be created via this endpoint and sending either returns 422.

Headers

string
required
Bearer tdao_live_…
string
required
Your organization’s UUID.
string
required
application/json

Body

The request body shape depends on the listing_type you pick. Three fields are required on every request regardless of type, and each type then has its own set of required and optional fields on top. Sending a request that’s missing a required field returns 422 with a single error message naming every missing field, so you can fix all of them in one round trip.

Universal required fields (every listing_type)

These three are required on every request, no matter which type you are creating.
string
required
One of aircraft, engine, or apu. Sending parts or landing_gear returns 422.
number
required
Asking price in USD. UI label: “Price ($) *”.
string
required
ISO country code, e.g. IN. UI label: “Country *” / “Location *”.

listing_type = "aircraft"

Mirrors the UI wizard’s Aircraft Details step exactly.

Required for aircraft

string
required
Human-readable name from the aircraft-types vocabulary, e.g. A320-200. Case-insensitive. Unknown values return 400 unknown_vocabulary with the full allowed list in the body. UI label: “Aircraft Model *”.
integer
required
How many of this aircraft are on offer. UI label: “Quantity *”. UI form defaults to 1 but the API has no default — send the value explicitly.
Yes or No. UI label: “Incident Related *”.

Optional for aircraft

string
Aircraft manufacturer, e.g. Boeing. UI label: “Manufacturer”.
integer
Year the aircraft was built. UI label: “Year”.
string
Aircraft tail number. UI label: “Tail Number”.
string
Last operator / traceability history. UI label: “Traceability”.
string
Free-text description of the engines on the aircraft. UI label: “Engines”.
string
Free-text description of the APU on the aircraft. UI label: “APU”.
number
Total airframe hours. UI label: “Total Hours”.
integer
Total airframe cycles. UI label: “Total Cycles”.
string
Free-text description shown on the listing detail page. UI label: “Description”.

listing_type = "engine"

Mirrors the UI wizard’s Engine Details step exactly.

Required for engine

string
required
Human-readable name from the engine-models vocabulary, e.g. CFM56-5B. Case-insensitive. UI label: “Engine Model *”.
string
required
Engine serial number. UI label: “ESN *”.
number
required
Cycles remaining (in hours). UI label: “Cycles Remaining (hours) *”.
string (date)
required
ISO date the engine is available. UI label: “Available Date *”. UI form defaults to today; the API has no default.
string
required
One of Serviceable, As Removed, Overhauled, Repaired. UI label: “Condition *”.
integer
required
UI label: “Quantity *”.
array of string
required
Non-empty array containing any of sale, lease, exchange. Empty array is rejected. UI label: “Sale / Lease / Exchange”.

Optional for engine

string
Engine manufacturer. UI label: “Manufacturer”. The UI auto-fills this from the selected engine model; the API does not.
string
Free-text description. UI label: “Description”.

listing_type = "apu"

Mirrors the UI wizard’s APU Details step exactly.

Required for apu

string
required
Human-readable name from the apu-models vocabulary, e.g. APS3200. Case-insensitive. UI label: “APU Model *”.
string
required
APU manufacturer, e.g. Honeywell. UI label: “Manufacturer *”. The UI auto-fills this from the selected APU model; the API does not.
string
required
APU serial number. UI label: “SN *”.
string (date)
required
ISO date the APU is available. UI label: “Available Date *”.
string
required
One of Serviceable, As Removed, Overhauled, Repaired. UI label: “Condition *”.
integer
required
UI label: “Quantity *”.

Optional for apu

array of string
Array containing any of sale, lease, exchange. UI label: “Sale / Lease / Exchange”.
string
Free-text description. UI label: “Description”.

Strict mode is on for this endpoint. Sending an unknown body key returns 422 and tells you which key was wrong. Common stale names to avoid: aircraft_type_id / engine_model_id / apu_model_id (use the name, not the UUID), location_country (use country), listing_type=parts / listing_type=landing_gear (not supported on the public surface).

Response

201 Created. The full listing in the shape every GET returns.

Notes

  • Listings go directly to active status — there’s no draft path.
  • audience is not set at create time. Attach it on the same call that uploads the first document (see the upload endpoints) or via PATCH later.
  • Use the upload endpoints to attach documents and images.

See also