Skip to main content
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.
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

Authorization
string
required
Bearer tdao_live_…
X-Organization-Id
string
required
Your organization’s UUID.

Query parameters

Filtering

listing_type
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.
aircraft_type
string
Filter by aircraft-type name (e.g. A320-200). Case-insensitive. Same DX as the create endpoint no UUID lookup.
engine_model
string
Filter by engine-model name (e.g. CFM56-5B). Case-insensitive.
apu_model
string
Filter by APU model name (e.g. APS3200). Case-insensitive.
condition
string
country
string
Substring, case-insensitive.
Free-text search across title / description / msn.

Pagination

page
integer
default:"1"
per_page
integer
default:"20"
Minimum 1, maximum 100.

Response

200 OK. Paginated envelope:
{
  "items": [ /* ListingBrowseResponse[] */ ],
  "total": 12,
  "page": 1,
  "per_page": 20,
  "pages": 1
}
Each item carries the headline fields (id, listing_type, title, msn, condition, price, country, status, the vocab object, etc.) plus the 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