Sales / Lease / Exchange
Create a sales / lease / exchange
POST a new sales / lease / exchange via the public API.
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.
Mirrors the UI wizard’s Aircraft Details step exactly.
Mirrors the UI wizard’s Engine Details step exactly.
Mirrors the UI wizard’s APU Details step exactly.
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
Bearer tdao_live_…Your organization’s UUID.
application/jsonBody
The request body shape depends on thelisting_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.One of
aircraft, engine, or apu. Sending parts or
landing_gear returns 422.Asking price in USD. UI label: “Price ($) *”.
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
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 *”.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
Aircraft manufacturer, e.g.
Boeing. UI label: “Manufacturer”.Year the aircraft was built. UI label: “Year”.
Aircraft tail number. UI label: “Tail Number”.
Last operator / traceability history. UI label: “Traceability”.
Free-text description of the engines on the aircraft. UI label:
“Engines”.
Free-text description of the APU on the aircraft. UI label: “APU”.
Total airframe hours. UI label: “Total Hours”.
Total airframe cycles. UI label: “Total Cycles”.
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
Human-readable name from the engine-models vocabulary, e.g.
CFM56-5B. Case-insensitive. UI label: “Engine Model *”.Engine serial number. UI label: “ESN *”.
Cycles remaining (in hours). UI label: “Cycles Remaining (hours) *”.
ISO date the engine is available. UI label: “Available Date *”.
UI form defaults to today; the API has no default.
One of
Serviceable, As Removed, Overhauled, Repaired.
UI label: “Condition *”.UI label: “Quantity *”.
Non-empty array containing any of
sale, lease, exchange.
Empty array is rejected. UI label: “Sale / Lease / Exchange”.Optional for engine
Engine manufacturer. UI label: “Manufacturer”. The UI auto-fills
this from the selected engine model; the API does not.
Free-text description. UI label: “Description”.
listing_type = "apu"
Mirrors the UI wizard’s APU Details step exactly.
Required for apu
Human-readable name from the apu-models vocabulary, e.g.
APS3200. Case-insensitive. UI label: “APU Model *”.APU manufacturer, e.g.
Honeywell. UI label: “Manufacturer *”.
The UI auto-fills this from the selected APU model; the API does
not.APU serial number. UI label: “SN *”.
ISO date the APU is available. UI label: “Available Date *”.
One of
Serviceable, As Removed, Overhauled, Repaired.
UI label: “Condition *”.UI label: “Quantity *”.
Optional for apu
Array containing any of
sale, lease, exchange. UI label:
“Sale / Lease / Exchange”.Free-text description. UI label: “Description”.
Response
201 Created. The full listing in the shape every GET returns.
Notes
- Listings go directly to
activestatus — there’s no draft path. audienceis 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.

