# Every active sales / lease / exchange listing in the org
curl "$base_url/public/v1/sales-lease-exchange?page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Aircraft listings only
curl "$base_url/public/v1/sales-lease-exchange?listing_type=aircraft&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Engine listings only — optionally narrowed by engine_model name
curl "$base_url/public/v1/sales-lease-exchange?listing_type=engine&engine_model=CFM56-5B&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# APU listings only — optionally narrowed by apu_model name
curl "$base_url/public/v1/sales-lease-exchange?listing_type=apu&apu_model=APS3200&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Free-text search across title / description / msn
curl "$base_url/public/v1/sales-lease-exchange?search=CFM56&country=US&per_page=50" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
import requests
# All listings
resp = requests.get(
f"{base_url}/public/v1/sales-lease-exchange",
headers={"Authorization": f"Bearer {api_key}", "X-Organization-Id": org_id},
params={"page": 1, "per_page": 50},
)
# Engines only, case-insensitive vocab name filter
resp = requests.get(
f"{base_url}/public/v1/sales-lease-exchange",
headers={"Authorization": f"Bearer {api_key}", "X-Organization-Id": org_id},
params={"listing_type": "engine", "engine_model": "cfm56-5b"},
)
resp.raise_for_status()
for listing in resp.json()["items"]:
print(listing["id"], listing["price_usd"])
Sales / Lease / Exchange
List sales / lease / exchanges
Paginated list of sales / lease / exchanges owned by your organization.
GET
/
public
/
v1
/
sales-lease-exchange
# Every active sales / lease / exchange listing in the org
curl "$base_url/public/v1/sales-lease-exchange?page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Aircraft listings only
curl "$base_url/public/v1/sales-lease-exchange?listing_type=aircraft&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Engine listings only — optionally narrowed by engine_model name
curl "$base_url/public/v1/sales-lease-exchange?listing_type=engine&engine_model=CFM56-5B&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# APU listings only — optionally narrowed by apu_model name
curl "$base_url/public/v1/sales-lease-exchange?listing_type=apu&apu_model=APS3200&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Free-text search across title / description / msn
curl "$base_url/public/v1/sales-lease-exchange?search=CFM56&country=US&per_page=50" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
import requests
# All listings
resp = requests.get(
f"{base_url}/public/v1/sales-lease-exchange",
headers={"Authorization": f"Bearer {api_key}", "X-Organization-Id": org_id},
params={"page": 1, "per_page": 50},
)
# Engines only, case-insensitive vocab name filter
resp = requests.get(
f"{base_url}/public/v1/sales-lease-exchange",
headers={"Authorization": f"Bearer {api_key}", "X-Organization-Id": org_id},
params={"listing_type": "engine", "engine_model": "cfm56-5b"},
)
resp.raise_for_status()
for listing in resp.json()["items"]:
print(listing["id"], listing["price_usd"])
Always org-scoped returns only listings owned by your organization.
Each item carries the headline fields (id, listing_type, title, msn,
condition, price, country, status, the vocab object, etc.) plus the
This endpoint returns only
active sales / lease / exchange listings. By design.
Listings your team has moved to sold, under_offer, leased,
exchanged, suspended, archived, draft, or pending_review
are not included in the list response and there is no query parameter
to opt in. If you need to read a listing in any other status, fetch it
directly by id via
GET /public/v1/sales-lease-exchange/{listing_id} —
the detail endpoint surfaces every status.Headers
string
required
Bearer tdao_live_…string
required
Your organization’s UUID.
Query parameters
Filtering
string
One of
aircraft, engine, or apu. Sending parts or
landing_gear returns 422. Legacy rows of those types remain
readable via the detail endpoint.string
Filter by aircraft-type name (e.g.
A320-200).
Case-insensitive. Same DX as the create endpoint no UUID lookup.string
Filter by engine-model name (e.g.
CFM56-5B). Case-insensitive.string
Filter by APU model name (e.g.
APS3200). Case-insensitive.string
string
Substring, case-insensitive.
string
Free-text search across title / description / msn.
Pagination
integer
default:"1"
integer
default:"20"
Minimum 1, maximum 100.
Response
200 OK. Paginated envelope:
{
"items": [ /* ListingBrowseResponse[] */ ],
"total": 12,
"page": 1,
"per_page": 20,
"pages": 1
}
seller_org summary used in the marketplace browse table.
# Every active sales / lease / exchange listing in the org
curl "$base_url/public/v1/sales-lease-exchange?page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Aircraft listings only
curl "$base_url/public/v1/sales-lease-exchange?listing_type=aircraft&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Engine listings only — optionally narrowed by engine_model name
curl "$base_url/public/v1/sales-lease-exchange?listing_type=engine&engine_model=CFM56-5B&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# APU listings only — optionally narrowed by apu_model name
curl "$base_url/public/v1/sales-lease-exchange?listing_type=apu&apu_model=APS3200&page=1&per_page=20" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
# Free-text search across title / description / msn
curl "$base_url/public/v1/sales-lease-exchange?search=CFM56&country=US&per_page=50" \
-H "Authorization: Bearer $api_key" \
-H "X-Organization-Id: $org_id"
import requests
# All listings
resp = requests.get(
f"{base_url}/public/v1/sales-lease-exchange",
headers={"Authorization": f"Bearer {api_key}", "X-Organization-Id": org_id},
params={"page": 1, "per_page": 50},
)
# Engines only, case-insensitive vocab name filter
resp = requests.get(
f"{base_url}/public/v1/sales-lease-exchange",
headers={"Authorization": f"Bearer {api_key}", "X-Organization-Id": org_id},
params={"listing_type": "engine", "engine_model": "cfm56-5b"},
)
resp.raise_for_status()
for listing in resp.json()["items"]:
print(listing["id"], listing["price_usd"])
See also
- Get one listing for the full detail shape.
- Create for the post body.
- Rate limiting for the right cadence for sync loops.

