---
title: "Get Public Motor Performance"
method: GET
path: "/v1/public/motors/{component_id}/performance"
tags: ["v1", "public"]
---

# Get Public Motor Performance

`GET /v1/public/motors/{component_id}/performance`

## Request

- Base URL: `https://thrustlab.com`
- URL: `https://thrustlab.com/v1/public/motors/{component_id}/performance`
- Auth: none required

Precomputed thrust, power, current, efficiency and g/W for one motor.

Up to four propeller pairings, each an eight-point throttle series solved by
the Fast model on a stand-in battery chosen for that motor. The pack is
chosen so the paired propellers load the motor sensibly at full throttle.
The motor draws a useful share of its rated current and turns near its free
speed. Nothing is solved by this request: the series were computed in a
batch and promoted whole, so this is a database read whatever the traffic.

## Path parameters

- `component_id` string, required

## Response `200`

Successful Response

- PublicComponentPerformance: Every published pairing for one component, from the live generation.
  - `component_id` string, required
  - `family_key` string, nullable: Key the kv-variant switcher groups siblings by, or null when this brand's naming could not be tokenised reliably. Null means render no switcher — never guess a sibling.
  - `generation` CatalogGenerationView, required: Which batch these numbers came from, and what produced them.
    - `activated_at` string, nullable
    - `aero_model` string, nullable
    - `computed_at` string, nullable
    - `id` string, required: Public generation id (cgen_<ksuid>).
    - `nominal_battery_version` string, required
    - `pairing_version` string, required
    - `propeller_model` 'fast': Precomputed curves are Fast-model, the same model an anonymous run uses, so a page curve and a live result agree.
    - `solver_engine` string, required
    - `throttle_points` number[], required
  - `license` string, required
  - `object` 'component_performance'
  - `pairings` CatalogPairingView[], required: Empty when a generation is live but this part has none.
    - `battery_class` integer, nullable: Cells in series of the nominal pack used.
    - `best_efficiency` number, nullable: Peak system efficiency over the series, per cent.
    - `gates` object, required: Each validity check's verdict and the measurement it compared — a true/false/null per gate (null = the datasheet does not state that limit, so the gate was skipped) beside the peak it measured. Only pairings that passed every gate are published, so these read as the evidence for publishing rather than as a warning.
    - `object` 'catalog_pairing'
    - `pairing_index` integer, required: 0-based, ordered by the heuristic that planned it.
    - `partner_names` object, required: The same three as display names, so a legend needs no second read.
    - `partners` object, required: Public ids of the motor, propeller and battery that ran.
    - `series` CatalogSeriesPoint[], required
      - `current_A` number, nullable: Pack current, amps.
      - `efficiency` number, nullable: System efficiency, PER CENT (0-100) — pack terminals to thrust.
      - `g_per_W` number, nullable: Grams of thrust per electrical watt.
      - `power_W` number, nullable: Electrical power at the pack terminals, watts.
      - `rpm` number, nullable: Rotor speed at this point.
      - `throttle_pct` number, required: Commanded throttle, per cent.
      - `thrust_N` number, nullable: Thrust, newtons.
    - `stator_class` string, nullable: Motor stator size as a token, e.g. "2207".
  - `publishable` boolean: True when the live generation published at least two pairings for this part. One curve cannot show how the part behaves as its partner changes, which is what these pages are read for, so a page with fewer than two renders what it has and is deliberately kept out of the search index. A withheld pairing does not count against it — see `withheld`.
  - `type` 'motor' | 'propeller', required
  - `withheld` integer: How many pairings the batch planned for this part and then refused to publish, because the series exceeded the motor's rated current, spun the propeller past its printed maximum, sagged the pack, or ran from a datasheet whose pole count nobody attested. Only valid pairings appear in `pairings`, so this is the only way to tell a part whose window was explored to its edge from one that was not.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/thrustlab/apis/thrustlab-api.md) · [All operations](https://skmtc.dev/thrustlab/apis/thrustlab-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thrustlab/apis/thrustlab-api/revisions/c19717e52529?raw)
