> ## 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.

# Get one sales / lease / exchange

> Fetch a single sales / lease / exchange by id.

Returns the full listing record. Cross-org access returns
**404 not\_found** never reveals existence in another org.

## Headers

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

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

## Path parameters

<ParamField path="listing_id" type="string (UUID)" required />

## Response

`200 OK`. The same shape returned by the create endpoint:

<ResponseField name="id" type="string (UUID)" />

<ResponseField name="org_id" type="string (UUID)" />

<ResponseField name="listing_type" type="string">
  `aircraft | engine | apu` for listings created through the public
  API. Legacy UI-created rows may still surface `parts` or
  `landing_gear`.
</ResponseField>

<ResponseField name="aircraft_type | engine_model | apu_model | landing_gear_type" type="object">
  Whichever matches the listing\_type, populated with the full vocab row.
  `landing_gear_type` appears only on legacy listings; it can't be
  created via the public API. Parts listings carry no vocab object.
</ResponseField>

<ResponseField name="title / description / msn / condition" type="string | null" />

<ResponseField name="price_usd" type="number | null" />

<ResponseField name="price" type="number | null">
  Alias for `price_usd` added so the browse-table column lines up.
</ResponseField>

<ResponseField name="country" type="string | null" />

<ResponseField name="documents / images" type="array of URLs | null" />

<ResponseField name="audience" type="array | null" />

<ResponseField name="audience_set_at" type="string (datetime) | null" />

<ResponseField name="status" type="string">
  `draft | pending_review | active | under_offer | sold | leased | exchanged | suspended | archived`
</ResponseField>

<ResponseField name="seller_org" type="object | null">
  Summary of the org that owns the listing (name, city, country, plus
  the posting user's contact info).
</ResponseField>

<ResponseField name="created_at / updated_at / published_at / expires_at" type="datetime | null" />

<RequestExample>
  ```bash curl theme={null}
  curl "$base_url/public/v1/sales-lease-exchange/$listing_id" \
    -H "Authorization: Bearer $api_key" \
    -H "X-Organization-Id: $org_id"
  ```
</RequestExample>

<ResponseExample>
  ```jsonc 200 OK theme={null}
  {
    "id": "df1e...",
    "listing_type": "engine",
    "engine_model": { "name": "CFM56-5B", "manufacturer": "CFM International", ... },
    "title": "Low-cycle CFM56-5B",
    "msn": "ESN-9876",
    "condition": "Serviceable",
    "price_usd": 250000,
    "price": 250000,
    "country": "IN",
    "documents": [
      "https://.../listings-media/listings/df1e.../documents/abcd_specs.pdf"
    ],
    "images": null,
    "audience": null,
    "status": "active",
    "seller_org": { "name": "simplai", "contact_email": "...", ... },
    "created_at": "..."
  }
  ```

  ```jsonc 404 Not Found theme={null}
  { "detail": "Listing not found" }
  ```
</ResponseExample>

## See also

* [Update](/api-reference/listings/update) to patch fields.
* [Delete](/api-reference/listings/delete) to remove permanently.
* [Audience](/concepts/audience) for the visibility model.
