> ## Documentation Index
> Fetch the complete documentation index at: https://teardowns.aero/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List sales / lease / exchanges

> Paginated list of sales / lease / exchanges owned by your organization.

Always org-scoped returns only listings owned by your organization.

<Info>
  **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}`](/api-reference/listings/get) —
  the detail endpoint surfaces every status.
</Info>

## Headers

<ParamField header="Authorization" type="string" required>
  `Bearer tdao_live_…`
</ParamField>

<ParamField header="X-Organization-Id" type="string" required>
  Your organization's UUID.
</ParamField>

## Query parameters

### Filtering

<ParamField query="listing_type" 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.
</ParamField>

<ParamField query="aircraft_type" type="string">
  Filter by aircraft-type **name** (e.g. `A320-200`).
  Case-insensitive. Same DX as the create endpoint no UUID lookup.
</ParamField>

<ParamField query="engine_model" type="string">
  Filter by engine-model name (e.g. `CFM56-5B`). Case-insensitive.
</ParamField>

<ParamField query="apu_model" type="string">
  Filter by APU model name (e.g. `APS3200`). Case-insensitive.
</ParamField>

<ParamField query="condition" type="string" />

<ParamField query="country" type="string">
  Substring, case-insensitive.
</ParamField>

<ParamField query="search" type="string">
  Free-text search across title / description / msn.
</ParamField>

### Pagination

<ParamField query="page" type="integer" default="1" />

<ParamField query="per_page" type="integer" default="20">
  Minimum 1, maximum 100.
</ParamField>

## Response

`200 OK`. Paginated envelope:

```jsonc theme={null}
{
  "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.

<RequestExample>
  ```bash all theme={null}
  # 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"
  ```

  ```bash aircraft theme={null}
  # 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"
  ```

  ```bash engine theme={null}
  # 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"
  ```

  ```bash apu theme={null}
  # 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"
  ```

  ```bash search theme={null}
  # 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"
  ```

  ```python python theme={null}
  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"])
  ```
</RequestExample>

## See also

* [Get one listing](/api-reference/listings/get) for the full detail
  shape.
* [Create](/api-reference/listings/create) for the post body.
* [Rate limiting](/concepts/rate-limiting) for the right cadence for
  sync loops.
