Skip to main content
GET
/
public
/
v1
/
teardowns
# Every teardown your org owns, most recent first
curl "$base_url/public/v1/teardowns?page=1&per_page=20" \
  -H "Authorization: Bearer $api_key" \
  -H "X-Organization-Id: $org_id"
{
  "items": [
    {
      "id": "3c707051-021d-4d04-a8e7-4eb254e80858",
      "org_id": "72f95f4e-65bb-41b3-8ef4-226c5a59cbc1",
      "asset_type": "aircraft",
      "aircraft_type": { "name": "A320-200", "manufacturer": "Airbus", ... },
      "msn": "12345",
      "registration": "VT-ABC",
      "status": "active_starting",
      "teardown_status_label": "Starting",
      "location": "Tucson, AZ",
      "location_country": "US",
      "description": "Posted from ERP",
      "published_at": "2026-05-26T20:06:50.677262Z",
      "created_at": "2026-05-26T20:06:48.825931Z"
    }
    // ... up to per_page items
  ],
  "total": 7,
  "page": 1,
  "per_page": 20,
  "pages": 1
}

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.

Returns a paginated list of teardowns owned by your organization. Always org-scoped unlike the UI’s GET /teardowns (which returns a cross-org active feed), this endpoint never returns another org’s teardowns. There is no way to opt out.

Headers

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

Query parameters

Filtering

asset_type
string
Filter by asset type: aircraft or engine. APU and landing-gear teardowns are UI-only — passing either returns 422. Legacy rows with those types remain readable via the detail endpoint.
aircraft_type
string
Filter by aircraft-type name (e.g. A320-200). Case-insensitive. Unknown values return 400 unknown_vocabulary with the allowed list. Same DX as the create endpoint no UUID lookup required.
engine_model
string
Filter by engine-model name (e.g. CFM56-5B). Case-insensitive.
status
string (CSV)
Filter by status. Comma-separated list of internal status values: active_starting, active_in_process, active_completed, suspended, archived.
country
string
Filter by country (substring match, case-insensitive). e.g. US.
Free-text search across msn, registration, and description. Substring, case-insensitive.

Sorting

sort_by
string
default:"created_at"
One of created_at, msn, status, location_country, teardown_start_date, asset_type.
sort_dir
string
default:"desc"
asc or desc.

Pagination

page
integer
default:"1"
1-indexed page number.
per_page
integer
default:"20"
Page size. Minimum 1, maximum 100.

Response

200 OK. Paginated envelope:
items
array
Array of teardown summary objects (similar shape to the detail response same field names, same partner-facing renames).
total
integer
Total count of teardowns matching the filters across all pages.
page
integer
Echo of the requested page.
per_page
integer
Echo of the requested page size.
pages
integer
Total page count for the filtered set.
# Every teardown your org owns, most recent first
curl "$base_url/public/v1/teardowns?page=1&per_page=20" \
  -H "Authorization: Bearer $api_key" \
  -H "X-Organization-Id: $org_id"
{
  "items": [
    {
      "id": "3c707051-021d-4d04-a8e7-4eb254e80858",
      "org_id": "72f95f4e-65bb-41b3-8ef4-226c5a59cbc1",
      "asset_type": "aircraft",
      "aircraft_type": { "name": "A320-200", "manufacturer": "Airbus", ... },
      "msn": "12345",
      "registration": "VT-ABC",
      "status": "active_starting",
      "teardown_status_label": "Starting",
      "location": "Tucson, AZ",
      "location_country": "US",
      "description": "Posted from ERP",
      "published_at": "2026-05-26T20:06:50.677262Z",
      "created_at": "2026-05-26T20:06:48.825931Z"
    }
    // ... up to per_page items
  ],
  "total": 7,
  "page": 1,
  "per_page": 20,
  "pages": 1
}
The list endpoint currently returns the legacy field names (id / registration / location_country) rather than the partner-facing aliases (teardown_id / tail_number / country) the detail endpoint uses. We’re aligning the shapes in a future release; for now, branch on id in list responses and teardown_id in detail responses. Both refer to the same UUID.

Pagination patterns

For partners syncing all teardowns into an ERP, the typical loop:
page = 1
while True:
    resp = requests.get(
        f"{base_url}/public/v1/teardowns",
        headers=headers,
        params={"page": page, "per_page": 100},
    )
    data = resp.json()
    for td in data["items"]:
        upsert_into_erp(td)
    if page >= data["pages"]:
        break
    page += 1
For incremental sync (catching new teardowns since last run), filter by sort_by=created_at&sort_dir=desc and stop when you see a teardown you’ve already imported. We don’t currently expose a “created_after” filter request via support if you need one.

See also